如何重命名子目录中的文件?
我有这个样本:
001a
abc001.tif
abc002.tif
abc003.tif
002a
abcd001.tif
abcd002.tif
abcd003.tif
我想重命名所有子目录 001 - 00 x 中的每个文件,而不是重命名目录本身。我想从0001
每个以 1 开头的图像文件夹开始顺序重命名文件。
当我运行此命令时,它仅适用于主文件夹,不适用于子文件夹。我需要更改什么才能让它在每个子目录上递归运行并使每个目录以 1 开头。
for file in $path/*.tif; do
mv -v "${file}" "$path/$(printf "%04d" ${num}).tif"
num=$(( ${num} + 1 ))
done
我使用的操作系统是 OSX
我希望从文件名中删除 abc 。这只是一个例子。并非每个文件都以 abc 开头。
我尝试了这个,它重命名但不从每个子目录中的一个开始。我可以改变什么才能让它从一开始?
num=0
for file in */*.tif; do
echo mv -v "${file}" "$(printf "%04d\n" $num).tif"
(( num++ ))
done
What can I change in the script to not have it move the files out of the orignial directory
答案1
如果您安装了基于 perl 的rename
工具(有时称为 ),prename
您可以在一行中完成此操作,如下所示
rename -n 's|^.*|sprintf "%04d.tif", ++$a|e' */*.tif
正如所写的,它只会告诉您它会做什么。当您满意时,删除-n
静默运行,或将其替换为-v
看看发生了什么。
如果您没有这个工具,您可以编写一个与您的循环非常相似的循环,
num=0
for file in */*.tif; do
echo mv -v "${file}" "$(printf "%04d\n" $num).tif"
(( num++ ))
done
echo
当你确信它能达到你想要的效果时,删除它