重命名多个文件,同时使用unix中的动态文件名将它们移动到不同的目录

时间:2016-11-08 18:57:25

标签: bash awk sed

我想在将动态文件移动到其他目录时重命名它们。 文件名是:

File_{Date}_1
File_{Date}_2
File_{Date}_3
File_{Date}_4

新文件名应为:

File_{Date}_1.txt
File_{Date}_2.txt
File_{Date}_3.txt
File_{Date}_4.txt

我尝试使用mv命令,但似乎无法移动多个文件。 文件数量不固定,因此我无法逐行移动每个文件。 请帮忙建议。

2 个答案:

答案 0 :(得分:1)

您可以在每个文件上使用循环并使用mv命令,或使用rename命令:

rename 's/$/.txt/' File_*

(根据文件的命名方式改变glob表达式。)

答案 1 :(得分:0)

您可能只能使用有用-exec的查找命令。

find /path/to/files/ -type f -exec mv {} /new/destination/ +

-exec{}替换为文件名。诀窍在于,您使用-exec而不是+终止\;命令。这告诉我发现它应该等待执行命令,直到它将{}扩展为,我相信内核对参数的限制。

基本上它会mv f1 f2 f3 f4 f5... fN /new/destination/

显然,虽然这不会重命名文件。所以要完成我会跑

cd /new/destination/; find ./ -type f -exec mv {} {}".txt" \;

如果在运行命令之前可以通过cd进行保存文件的目录,则可以使用单个查找命令。

cd /path/to/files; find ./ -type f -printf "%P\n" -exec {} c/{}.txt \;

不幸的是,您不能使用两个{}+以find结尾,但单个命令仍应运行得更快。希望这能为您提供一些选择。