1

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

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 上使用命令行有什么建议吗?

4

2 回答 2

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

Note that the ${i//string/repl} syntax is a non-standard extension of sh, but you can do the same thing portably with something like:

for i in *; do j=$( echo "$i" | tr ' ' _); mv "$i" "$j"; done
于 2012-09-14T16:19:14.290 回答
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 部分(为了提高效率)。

于 2012-09-14T19:47:03.750 回答