我有一个包含50多个文件的文件夹。文件名的格式是 “名称空间 - 空间指定。扩展名。
如何复制这些文件以反转每个文件的名称和名称?
打开12.3 x64 KDE
提前谢谢
答案 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
执行它