Shell移动文件并重命名它们

时间:2014-03-17 15:54:45

标签: shell find mingw

我使用下面的行将html文件从源目录复制到目标目录。如何在将文件移动到001.html, 002.html, 003.html等时重命名文件?

find ${SourceDir} -type f -regex ".*\.\(htm\|html\|xhtm\|xhtml\)" -exec mv {} "${TargetDir}" \;

1 个答案:

答案 0 :(得分:0)

您可以在循环中使用计数器并使用shell参数扩展来获取文件扩展名。

以下内容可能适合您:

i=0
while read -r file; do
   fn=$(printf "%03d" $((++i)))       # get incremental numbers: 001, 002, ...
   mv "${file}" "${TargetDir}/${fn}.${file##*.}";
done < <(find ${SourceDir} -type f -regex ".*\.\(htm\|html\|xhtm\|xhtml\)")

如果您的shell不支持进程替换,您可以说:

i=0
for file in $(find ${SourceDir} -type f -regex ".*\.\(htm\|html\|xhtm\|xhtml\)"); do
   fn=$(printf "%03d" $((++i)))       # get incremental numbers: 001, 002, ...
   mv "${file}" "${TargetDir}/${fn}.${file##*.}";
done

如果文件名包含奇怪的字符,请注意这可能不起作用。