【发布时间】:2021-05-27 21:00:25
【问题描述】:
我正在尝试通过以下方式将前缀 00_ 递归地附加到我的所有 pdf 文件中:
find . -name "*.pdf" | rename 's/^/00_/' *
但是,通过这种方式,我将前缀附加到路径。用rename递归修改文件名的表达式是什么?
【问题讨论】:
我正在尝试通过以下方式将前缀 00_ 递归地附加到我的所有 pdf 文件中:
find . -name "*.pdf" | rename 's/^/00_/' *
但是,通过这种方式,我将前缀附加到路径。用rename递归修改文件名的表达式是什么?
【问题讨论】:
简单的bash,不使用外部命令(但mv):
#!/bin/bash
shopt -s globstar
for pathname in **/*.pdf; do
basename=${pathname##*/}
dirname=${pathname%"$basename"}
mv -- "$pathname" "${dirname}00_$basename"
done
【讨论】:
在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")"
【讨论】:
默认情况下,重命名会修改整个路径。通过传递-d 标志可以单独考虑文件名。另请注意,* glob 将匹配当前目录中的所有文件,而不仅仅是您传递给stdin 的文件。所以要在文件名前面加上00_,请使用:
find . -name "*.pdf" | rename -d 's/^/00_/'
您还可以添加 -n 标志来进行试运行,其中将打印重命名而不执行。
【讨论】: