私の macOS システムには、7,000 枚以上の画像が入ったフォルダーがあり、ファイル名にハイフンが含まれている画像を削除する必要があります。ディレクトリに入った後、次のコマンドを試しましたが、応答がありませんcd
(ターミナルは初めてです)。
rm -rf -- -
$ rm ./-
find . -type f -regex '/-/' -exec rm {} \;
find . -name '-*' | xargs rm
find . -regex '/-/' -print0 | xargs -0 rm
答え1
このパターンは*-*
、現在のディレクトリ内の任意の名前と一致します。ダッシュを含む(文字通り「少なくとも1つの を含む名前-
。他の文字列が先頭または末尾に付く場合もあります」)。つまり、次のように実行できるはずです。
rm ./*-*
または
rm -- *-*
-
現在のディレクトリにある、名前に文字を含むすべてのファイルを削除します。
シェルではzsh
、*-*(.)
パターンとして を使用すると、一致は通常のファイルのみに制限されます (ディレクトリは除外されますが、rm
ディレクトリを削除することはできません)。
rm
一度に処理するにはファイルが多すぎる場合は、find
次のように使用します。
find . -maxdepth 1 -type f -name '*-*' -delete
-maxdepth 1
検索を現在のディレクトリのみに制限するために使用し、-type f
通常のファイルのみを削除するように追加しました。
(やや遅い) ループを使用することもできます:
for name in ./*-*; do
rm "$name"
done
「ワンライナー」を好む人もいますが、このループは次のように記述できます。
for name in ./*-*; do rm "$name"; done
...ただし、これを複数行のコマンドとして入力することは、ほとんどの最新のシェルでは間違いなく可能です。