使用重命名递归地为所有文件附加前缀
Append a prefix to all files recursively with rename
我正在尝试使用递归方式将前缀 00_ 附加到我的所有 pdf 文件:
find . -name "*.pdf" | rename 's/^/00_/' *
但是,通过这种方式,我在路径中附加了一个前缀。用rename递归修改文件名的表达式是什么?
使用查找并在 while 循环中处理结果:
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")"
默认情况下,重命名会修改整个路径。通过传递 -d
标志,可以单独考虑文件名。另请注意,*
glob 将匹配当前目录中的所有文件,而不仅仅是您传递给 stdin
的文件。所以要在文件名前添加 00_
,请使用:
find . -name "*.pdf" | rename -d 's/^/00_/'
您还可以添加 -n
标志来执行 dry-运行 打印重命名而不执行。
在普通 bash
中,不使用外部命令(但 mv
):
#!/bin/bash
shopt -s globstar
for pathname in **/*.pdf; do
basename=${pathname##*/}
dirname=${pathname%"$basename"}
mv -- "$pathname" "${dirname}00_$basename"
done
我正在尝试使用递归方式将前缀 00_ 附加到我的所有 pdf 文件:
find . -name "*.pdf" | rename 's/^/00_/' *
但是,通过这种方式,我在路径中附加了一个前缀。用rename递归修改文件名的表达式是什么?
使用查找并在 while 循环中处理结果:
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")"
默认情况下,重命名会修改整个路径。通过传递 -d
标志,可以单独考虑文件名。另请注意,*
glob 将匹配当前目录中的所有文件,而不仅仅是您传递给 stdin
的文件。所以要在文件名前添加 00_
,请使用:
find . -name "*.pdf" | rename -d 's/^/00_/'
您还可以添加 -n
标志来执行 dry-运行 打印重命名而不执行。
在普通 bash
中,不使用外部命令(但 mv
):
#!/bin/bash
shopt -s globstar
for pathname in **/*.pdf; do
basename=${pathname##*/}
dirname=${pathname%"$basename"}
mv -- "$pathname" "${dirname}00_$basename"
done