用rename递归地给所有文件附加一个前缀



我试图通过使用:

递归地将前缀00_附加到我所有的pdf文件:
find . -name "*.pdf" | rename 's/^/00_/' *

然而,在这种方式中,我向路径添加了一个前缀。用rename递归修改文件名的表达式是什么?

默认情况下,rename会修改整个路径。文件名可以通过传递-d标志单独考虑。还要注意,*glob将匹配当前目录中的所有文件,而不仅仅是传递给stdin的文件。因此,要在文件名前添加00_,请使用:

find . -name "*.pdf" | rename -d 's/^/00_/'

您还可以添加-n标志来执行一次演练,其中将重命名打印出来而不执行。

在while循环中使用find并处理结果:

while read fil;
do 
file=$(basename $fil);                    # Extract the file name from the path
dir=$(dirname $fil)                       # Extract the directory from the path
mv -f "$fil" "$dir/00_$file"              # Use file and dir for the move command
done <<< "$(find . -name "*.pdf")"

在普通bash中,不使用外部命令(但mv):

#!/bin/bash
shopt -s globstar
for pathname in **/*.pdf; do
basename=${pathname##*/}
dirname=${pathname%"$basename"}
mv -- "$pathname" "${dirname}00_$basename"
done

相关内容

最新更新