Unix CLI脚本,用于重命名包含空格的文件夹

时间:2012-09-14 16:15:27

标签: regex bash unix rename

我有一个文件夹结构的目录如下:

DATA -- ABD 1231345 -- 2012_01_08
                    -- 2012_03_09
                    -- 2012_06_11

     -- DEF 4859480 -- 2012_02_10
                    -- 2012_05_10
                    -- 2012_07_10

我要做的是:

  • cd DATA
  • 运行bash脚本(在/DATA中),将重命名所有第一个子文件夹
  

ABD 1231345

  

ABD_1231345

您是否有关于如何在Mac OSX / unix上使用命令行的建议?

2 个答案:

答案 0 :(得分:2)

for i in *; do mv "$i" "${i// /_}"; done

请注意,${i//string/repl}语法是sh的非标准扩展,但您可以使用以下内容进行相同的操作:

for i in *; do j=$( echo "$i" | tr ' ' _); mv "$i" "$j"; done

答案 1 :(得分:0)

当前目录包含:

aa 111
bb 222
aaa.txt
aaa 1111.txt
bbb 2222.txt

<强>输出:

aa_111
bb_222
aaa.txt
aaa 1111.txt
bbb 2222.txt

<强>代码:

ls -ltr|awk -F" " '{print $9,$10}'|sed 's/ $//g'|grep -v "^$">abc

while read line
do
val=`echo $line`
echo $line|grep " ">/dev/null
rc=$?
if [[ -d "$val" && $rc -eq 0 ]]
then
replace=`echo $line|sed 's/ /_/g'`
mv "$val" "$replace"
fi
done<abc

rm -f abc

这里,上面的脚本只在当前目录中重命名文件夹。你可以跳过grep部分(它的效率)。