我有这个:
$ ls a
0 1 1_ 2 2_ 3 3_ 4 4_ 5 5_ 6 6_ 7 7_ 8 8_ 9 9_ a a_ b b_ c c_
d d_ e e_ f f_
想要将x_移动到x,我正在尝试这个:
find a/*_ -type f -exec sh -c 'mv echo "$1" echo "$1" | sed \'\$s/.$//'' sh {} \;
我得到的是:
mv: target `a/x_' is not a directory
答案 0 :(得分:1)
更好地使用prename;)
prename 's/.$//' a/*_
取决于您的发行版,有时称为重命名。有时会有一个ELF格式,但perl是必需的,你可以这样测试:file $(readlink -f $(type -p rename))
答案 1 :(得分:1)
我很想使用:
(cd a; for file in *_; do mv "$file" "${file%_}"; done)
答案 2 :(得分:0)
for f in {1..9}; do test -e $f_ && mv ${f}_ $f ; done
for f in {a..d}; do test -e $f_ && mv ${f}_ $f ; done
可以使测试更精细,以检查$ f_是否是test -f $f_
的文件,我可以提供测试以确保$ f存在并且是一个目录:
for f in {1..9} {a..d}
do
test -f $f_ && test -d $f && mv ${f}_ $f
done
如果没有目录$ f,上面的命令会将$ f_重命名为$ f,如果$ f存在,并且是一个文件,则覆盖。