rarファイルを含む現在の作業ディレクトリのすべてのサブディレクトリを削除しようとしています。
最初の試み:find -name *.rar -exec rm -r {}/.. ';'
有効なディレクトリではないため失敗しました。もっと合理的なコマンドを試してみましたが、dirname {}
意図しない内容をほとんど削除してから質問をすることにしました。
Windows 7でCygwinを使用しています。
答え1
zshを使う:
rm -rf **/*.rar(:h)
サフィックス:h
が適用されます歴史拡張修飾子 h
("head")各一致のデフォルト名を削除し、ディレクトリ部分のみを残します。
このディレクトリが実際に削除したいディレクトリであることを確認してください!たとえば、まず一時ディレクトリに移動します。
mkdir DELETE
mv **/*.rar(:h) DELETE/
# check that you really want to delete everything in DELETE
rm -r DELETE
答え2
findを使用してbash -c
高度な操作を実行できます-exec
。 catで一時ファイルを使用する際の問題は、ファイルにxargs
スペース、改行、またはタブが含まれていると中断されることです。次は動作します。
find . -type f -name '*.rar' -exec bash -c 'rm -rf "${@%/*}"' -- {} +
+
"$@"で検索を使用すると、を使用するのとrm
同じように一度実行されますxargs
。
答え3
一対のステートメントを使用してこれを実行できます。
まず、次のコマンドを使用して削除するディレクトリのリストを取得します。
find -name *.rar -exec dirname {} ';' > toremove
次に、cat toremove
目的のフォルダが含まれていることを確認してください。その後、渡してrm -rf
使用してください。
sed 's/^/"/g' toremove | sed 's/$/"/g' | xargs rm -r
最後に、rm toremove
。
答え4
次のように試すことができます。
for dir in */; do # iterate all subdirectories
touch $dir"dummy.rar" # create a "rar"-file...
for file in $dir*.rar; do # ...so this won't break on zero such
rm $file # remove the dummy, and all archives
done
done