デフォルトでは、/test/
.などの一部のファイルには1つのバージョンがあり、他のファイルには1つのバージョンしかありません。.doc
.pdf
.pdf
.doc
test.doc
test.pdf
私がしたいことは、発生した状況を見つけて.doc
スクリプトを使用してその状況を削除することです。.pdf
私は次のコード行を修正しました。
find /test/ -name "*.doc" - exec basename {} .doc \; -exec rm {}.pdf \;
ただし、これはfindコマンドから名前付きファイルを削除するexample.doc.pdf
のではなく、指定されたファイルが見つからないというエラーを返します。.pdf
私がこれを試みる理由は、一部のファイルに削除したくない一致ファイルが.pdf
ないためです。.doc
答え1
次のコマンドを使用できますfind
。
find /test/ -name "*.doc" -exec sh -c 'a="$1"; rm "${a%.doc}.pdf"' find-sh {} \;
.doc
ディレクトリからファイルを検索します/test/
。見つかった各ファイルに対して、sh
ファイルを引数として使用してシェルが呼び出されます。ファイルが存在する場合は、${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 \;