我使用下面的行将html文件从源目录复制到目标目录。如何在将文件移动到001.html, 002.html, 003.html
等时重命名文件?
find ${SourceDir} -type f -regex ".*\.\(htm\|html\|xhtm\|xhtml\)" -exec mv {} "${TargetDir}" \;
答案 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
如果文件名包含奇怪的字符,请注意这可能不起作用。