一連のサブフォルダー(a
からz
など)があり、それぞれに対してコマンドを実行する場合(rm *.pdf
またはls *.pdf
など)、どうやってそれをしますか? 「手動」アプローチは、cd a
、rm *.pdf
、またはls *.pdf
、cd ..
、cd b
、...複雑すぎるように思われるので、そこにあると思います。より簡単なアプローチでなければなりません。
これを試してみてください( bash 、ブレース拡張&グロブを使用):
rm -f {a..z}/*.pdf
または
rm -f [a-z]/*.pdf
シェルにブレース拡張機能がない場合。
[a-z]
とは異なり、{a..z}
(ksh93でもサポート)はglob
ではなく、ブレース展開であり、ファイルが存在するかどうかに関係なく(globs
の前に)展開されます。ない。これは、a、b ...が存在するかどうかに関係なく、rm -f a/*.pdf b/*.pdf
...のようなものです。また、[a-z]
とは異なり、範囲はロケールに依存する可能性があるため(é, ś
...を含めることができるなど)、{a..z}
はバイト範囲でのみ機能します(ASCII
文字範囲、および番号範囲)
(説明については、Merci Stephane Chazelas)
その特定の例について:
rm [a-z]/*.pdf
どのシェルでも。
一般的なケースでは、ボーンのようなシェルを使用して、ディレクトリのリストを$1
、$2
...に配置できます。
set a b c foo bar...
次に、次のようにループします。
for i do (cd -- "$i" && cmd -- *.pdf); done
もちろん、1つのコマンドで両方を実行できます。
for i in a b c foo bar...; do (cd -- "$i" && cmd -- *.pdf); done
重要なのは、サブシェル(...)
を使用して、cd
がそのサブコンテキストにのみ影響するようにすることです。
find を使用します。次のようなものは、すべてのフォルダ(2つ以下のフォルダの深さ)を検索し、そのフォルダからrm <pathname>/*.pdf
を実行します。
find pathwithsubfolders -type d -maxdepth 1 -mindepth 1 -exec rm {}/\*.pdf \;
私の意見では、これらのコマンド(ご存知のように、恐ろしい結果をもたらす可能性のあるコマンド)を使用するのに最適なことは、実行しようとしているコマンドの前に「echo」ステートメントを追加することです...あなたが引き金を引く前にあなたが望むもののように。
findが最善の解決策かもしれませんが、シェル(bash)で簡単に可能です。
GLOBIGNORE=.
for subdir in *; do
test -d "$subdir" || continue
cd "$subdir"
ls *pdf
cd -
done
またはさらに簡単
ls */*.pdf
さて、現在のディレクトリからすべてのPDFファイルとその下にあるall他のサブディレクトリを削除したい場合は、次のようにします。
find -name "*.pdf" -exec rm -i {} \;
注意すべき2つのこと:
1- find
のスコープが広すぎる場合にファイルを削除する前にプロンプトが表示されるように、-i
スイッチをrmに追加しました。
2- find
のマニュアルページを読むことを強くお勧めします。それは簡単に私のこれまでのお気に入りの1つです。
ディレクトリの1レベルだけの場合は、簡単に行うことができます
rm */*.pdf
これにより、すべてのディレクトリ内のすべてのpdfファイルが削除されますが、それ以外は削除されません。
このような場合、削除を実行する前に、選択したファイルのリストを確認することができます。それをするために
ls */*.pdf
そして、リストが画面からスクロールするのに十分な長さである場合は、ページャーにパイプで渡します。
ls */*.pdf | more
Perl ポータブルソリューションの使用(Unixライク向け)
Perl -e '`rm -rf "$_"/*.pdf` for "a" .. "z"'
これにより、a..z
ディレクトリの下のサブディレクトリが再帰的に削除されます
私は通常xargsを好みます:
find <path> -name '*.pdf' | xargs {ls|rm|etc}
これには、パイプラインの途中でgrepまたはその他の操作を追加するという利点がありますが、ファイル名またはパス名にスペースがあるファイルを適切に処理できないという欠点があります。