如何使用unix重命名目录中的文件?

如何使用unix重命名目录中的文件?

如何重命名子目录中的文件?

我有这个样本:

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当你确信它能达到你想要的效果时,删除它

相关内容