使用basename去除文件扩展名并搜索同名文件

使用basename去除文件扩展名并搜索同名文件

基本上,我有一个文件夹/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 \;

相关内容