
私のディレクトリは次のとおりです。
音楽:1.mp3、2.flac、3.wav、4.ogg、5.mp4
次のコマンドを使用して、拡張子が.mp3、.wav、.flac、および.oggのすべてのファイルを削除しようとしました。
find ./Music -type f -name \('*.mp3' -or -name '*.wav' -or -name '*.flac' -or -name '*.ogg'\) -delete
しかし、ディレクトリには何もしません。
理由をご存知ですか?
(しかし私は音楽カタログより1レベル上です)
答え1
構文が正しくありません。-name
次のように、すべてのオプションが同じ括弧内にあり、括弧の周りにスペースが必要です。
find ./Music -type f \( -name '*.mp3' -or -name '*.wav' -or -name '*.flac' -or -name '*.ogg' \) -delete
元のコマンドが使用中です。これは、または、または-name \('*.mp3' -or -name '*.wav' -or -name '*.flac' -or -name '*.ogg'\)
というファイルを探していることを意味します。オプションなしでコマンドを実行すると、これを確認できます。\(*.mp3
'*.wav'
'*.flac'
'*.ogg'\)
-delete
$ find ./Music -type f -name \('*.mp3' -or -name '*.wav' -or -name '*.flac' -or -name '*.ogg'\)
./Music/3.wav
./Music/2.flac
\('*.mp3'
一致が見つからないか一致しないため、*.ogg\)
ファイルが見つかりません。コマンドは括弧内にグループ化されていないので(これを行うには括弧の周りにスペースが必要です)、意図したとおりに適用されません(申し訳ありませんが、解析-delete
方法がわかりません)。find