例如,我有一个文件列表
./2020/47-06/gl-086115.org
./2020/47-06/gl-085792.org
./2020/47-06/gl-086941.org
./2020/47-06/gl-087140.pdf
./2020/47-06/gl-085982.pdf
./2020/47-06/gl-087032.org
./2020/47-06/gl-086115.pdf
./2020/47-06/gl-087490.pdf
我使用以下命令删除开头gl-
,但没有成功。
find . -type f -name '*gl-*' -exec rename 's/^gl-//g' {} \;
答案1
像这样,需要-d
:
$ find . -type f -name '*gl-*' -exec rename -n -d 's/^gl-//' {} \;
rename(./2020/47-06/gl-087032.org, ./2020/47-06/087032.org)
rename(./2020/47-06/gl-086941.org, ./2020/47-06/086941.org)
rename(./2020/47-06/gl-087140.pdf, ./2020/47-06/087140.pdf)
rename(./2020/47-06/gl-085792.org, ./2020/47-06/085792.org)
rename(./2020/47-06/gl-085982.pdf, ./2020/47-06/085982.pdf)
rename(./2020/47-06/gl-086115.org, ./2020/47-06/086115.org)
rename(./2020/47-06/gl-086115.pdf, ./2020/47-06/086115.pdf)
rename(./2020/47-06/gl-087490.pdf, ./2020/47-06/087490.pdf)
man rename
:
-d, --filename, --nopath, --nofullpath
不重命名目录:仅重命名路径的文件名部分。
如果你没有-d
开关
find ./2020/ -type f -name '*gl-*' -exec rename -n 's|/gl-|/|g' {} +
gl-
但请注意路径中不要出现任何其他情况。
更安全的方法是:
find ./2020 -type f -name '*gl-*' -exec bash -c '
cd $(dirname "$1")
rename -n "s/gl-//" ./"$1"
' bash {} \;
-n
当对输出满意时丢弃。