我想在将动态文件移动到其他目录时重命名它们。 文件名是:
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命令,但似乎无法移动多个文件。 文件数量不固定,因此我无法逐行移动每个文件。 请帮忙建议。
答案 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结尾,但单个命令仍应运行得更快。希望这能为您提供一些选择。