名前にスペースが含まれているすべてのファイルを削除しようとしています。次のコマンドを使用しています。しかし、これはエラーを引き起こします。
注文する:ls | egrep '. ' | xargs rm
ここでコマンドを使用すると、ls | egrep '. '
ファイル名にスペースが含まれるすべてのファイル名が表示されます。ただし、出力をrmに渡そうとすると、すべてのスペース(先行または末尾)が削除されます。だから私のコマンドは正しく実行されません。
名前に空白が1つ以上あるファイルを削除する方法についてのアドバイスはありますか?
答え1
rm
コマンドに標準のワイルドカードを使用できます。
rm -- *\ *
これにより、名前にスペースを含むすべてのファイルが削除されます。スペースはエスケープされているため、シェルはスペースを区切り文字として解釈しません。追加すると、--
ダッシュで始まるファイル名に関する問題を回避できます(引数として解釈されないrm
)。
削除する前に各ファイルを確認するには、次の-i
オプションを追加します。
rm -i -- *\ *
答え2
私はls
出力を解析するのを避けます
なぜしないでください:
find . -type f -name '* *' -delete
大丈夫ですrm
:-)。
これは再帰的ですが、コメントで述べたように、現在のディレクトリとネストしたディレクトリにスペースがあるすべてのファイルは削除されます。
答え3
「奇妙なファイル」という仮想名を持つこのファイルを見てください。
ソリューション1
rm strange\ file
ソリューション2
rm "strange file"
解決策3
ls -i "strange file"
これにより、インデックスノードが表示されます。
find . -inum "numberoofinode" -exec rm {} \;
ファイル名が非常に奇妙な場合(例:
!-filename or --filename
使用
rm ./'!-filename'
答え4
あなたはそれを使用することができます:
find . -name '* *' -delete