基本上,我有一个文件夹/test/
,其中包含许多类型为.doc
和 的文件.pdf
。一些文件有一个.pdf
版本.doc
,例如test.doc
和 ,test.pdf
而其他文件只有一个版本。
我想做的是找到出现的情况并使用脚本.doc
删除相应的情况。.pdf
我一直在修改这行代码:
find /test/ -name "*.doc" - exec basename {} .doc \; -exec rm {}.pdf \;
但是,这会返回错误,无法找到指定的文件,example.doc.pdf
而不是.pdf
从 find 命令中删除相应的命名文件。我尝试这样做的原因是因为有些.pdf
文件没有.doc
我不想删除的匹配文件。
答案1
您可以使用此find
命令:
find /test/ -name "*.doc" -exec sh -c 'a="$1"; rm "${a%.doc}.pdf"' find-sh {} \;
它将搜索.doc
目录中的文件/test/
。对于每个找到的文件,sh
都会使用该文件作为参数调用 shell。如果文件存在,${a%.doc}.pdf
则将文件扩展名替换.doc
为.pdf
并删除它。rm
答案2
将以下脚本另存为rm_dub.sh
#!/bin/sh
rm_dub() {
dir=$(dirname -- "$1")
base=$(basename -- "$1" "$2")
rm -- "$dir/$base$3"
}
rm_dub "$@"
并将其与
find /test/ -name "*.doc" -exec sh rm_dub.sh {} .doc .pdf \;