在Linux中批量重命名

时间:2013-12-05 17:35:53

标签: bash

我有一个包含50多个文件的文件夹。文件名的格式是 “名称空间 - 空间指定。扩展名。

如何复制这些文件以反转每个文件的名称和名称?

打开12.3 x64 KDE

提前谢谢

4 个答案:

答案 0 :(得分:1)

我倾向于喜欢这样的事情:

for orig in *\ -\ *.*; do
    BASE=${orig%.*}
    EXT=${orig##*.}
    NS=${BASE% - *}
    SD=${BASE#* - }
    echo mv "$orig" "$SD - $NS.$EXT"
done

并删除echo如果看起来正确(la @ V-X的“删除| bash”)

man bash并滚动到“参数扩展”部分。

答案 1 :(得分:1)

这里的重命名命令很好:

$> ls ./*txt
./foo - bar.txt  ./foo.txt

$> rename -nv 's/(\w*) - (\w*)/$2 - $1/' ./*txt
./foo - bar.txt renamed as ./bar - foo.txt

n阻止命令实际重命名文件,这样您就可以在最终尝试重命名之前尝试尽可能多的正则表达式。

答案 2 :(得分:0)

我们假设名称或名称既不包含.也不包含-

我通常通过像ls -la | awk '{fn1=$10; split(fn1, file_ext, "."); split(file_ext[1], name_designation, " - "); fn2=name_designation[2] " - " name_designation[1] "." file_ext[2]; print "mv " fn1 " " fn2 }' | bash

这样的方式来做这件事

我知道,这不是一个很好的解决方案,但它有效(有上述限制)。

答案 3 :(得分:0)

你的意思是你有文件:

name - designation.extension

你想要:

designation - name.extension

? (保留空间;因为你没有提到将它们取下)

然后:

find /some/path -name '* - *.*' -print | sed -e 's/^\(.*\) - \(.*\)\.\([^\.]*\)$/mv "&" "\2 - \1.\3"/' > script_to_rename.sh

如果script_to_rename.sh看起来很好,

.  ./script_to_rename.sh

执行它