Bash 脚本:重命名目录下的所有文件?

Bash 脚本:重命名目录下的所有文件?

以下是我想用伪代码做的事情:

for subdir in [all first-level subdirectories of the current directory]:
    for file in [all files in subdir]:
        rename file to "myprefix_" + current_filename_padded_with_zeroes

我的意思current_filename_padded_with_zeroes是,例如,如果当前文件名01.png更改为0001.png,或者100.png将其更改为0100.png

有人能帮我把上述内容翻译成 bash 脚本吗?

类似于...我不确定如何进行重命名部分:

#!/bin/bash
for DIR in $(ls) 
do
    for FILENAME in $(ls $DIR)
        do
        mv "$FILENAME" "myprefix_{%FILENAME}"   
        done
done

答案1

使用以下命令重命名当前目录中的所有文件:

for file in * ; do
    mv "$file" "myprefix_$( printf "%04d" $file )"
done

printf程序与不少编程语言中的同名函数类似。


您需要使用basenamedirname从不同的目录使其工作。

答案2

用来printf填充零,直到达到您想要的长度。%04d意味着用零填充到 4 位数字的长度(如果您的数字> = 4 位数字,则不会改变任何内容)。匹配之前${a%.png}的部分。一些和需要从路径中提取实际文件名并重新连接它。$a.pngbasenamedirname

您可以使用 替换循环find . -dept 2

find . -depth 2 -exec bash -c 'FILENAME=`basename {}`; mv {} `printf \`dirname {}\`/%04d.png ${FILENAME%.png}`'  \;

相关内容