我试图通过使用:
递归地将前缀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