ファイル名にスペースがない限り機能する例をいくつか見つけました。残念ながら、私のファイル名にはスペースが含まれています (これは私の選択ではなく、実際には削除する必要があるものです)。
たとえば、これがうまくいくと思った方法です:
find . -type f | grep ).MOV | xargs rm
次のようなファイルを削除したいからです:
- L112 (1).MOV
- L113 (1).MOV
- L113 (2).MOV
- 等
そして、私は次のようなファイルを保存したい
- 動画
- 動画
- 動画
- 等
これにより、ファイルが正しく検出されます。
検索 . -type f | grep ).MOV
しかし、rm にパイプすると、ファイル名のスペースによってエラーが発生します。
ご協力いただければ幸いです。
答え1
rm *\).MOV
答え2
改行を区切り文字として使用するように指示しますxargs
。
find . -type f | grep ).MOV | xargs -d'\n' rm
より良いのは、find
マッチングと使用を許可し-print0
、xargs -0
どれでもファイル名に\n
!文字を含めることもできます。
find . -type f -name '*).MOV' -print0 | xargs -0 rm
さらに良いのは、直接find
電話をかけることですrm
。
find . -type f -name '*).MOV' -exec rm {} +
最善の方法は、スキップしrm
てfind
削除することです。
find . -type f -name '*).MOV' -delete
あるいは、この特定のケースでは、重機をすべて必要とするのは誰でしょうか?
rm *\).MOV
答え3
これを試して:
find . -name "*).MOV" -exec rm {} \;
答え4
ほとんどの Unix インストールでは、ファイル名の先頭にバックスラッシュを付けることで、ファイル名内のスペースを表すことができます。たとえば、次のように試してください。
mkdir blah
cd blah
touch file1
touch file2
touch "file 3"
touch "file 4"
「ls」を実行すると、次のようになります:
ファイル 3 ファイル 4 ファイル1 ファイル2
ここで「ls *\ *」を実行すると、スペースを含むすべての内容が表示されます。
ファイル 3 ファイル 4
おそらく、「rm *\ *」だけで十分でしょう。または、ニーズに合わせて正規表現を少し変更してください。
お役に立てれば幸いです!