0

ディレクトリ内のファイルを削除しようとしています。一部のファイルには名前が二重引用符で囲まれていますが、そうでないファイルもあります。これらのファイルの例は次のとおりです。
"DDD344".csv
D2DW.csv
これらのファイルはどちらも directory 内のサブディレクトリにありますYM

そのfindようなファイルを削除するには、次findのように呼び出します。
find YM -name "*.csv" -print | xargs rm

上記のコマンドを実行すると、多くのNo such file or directoryエラーが発生します。
sedは次の方法で使用してみました:

find yum/yum_hyd -name "\"*\".csv" | sed 's/"/\"/g' | xargs rm
しかし、役に立たない。ファイルを削除するにはどうすればよいですか?

4

3 に答える 3

3

問題は、あなたが使用していることですxargs。はひどく壊れたプログラムであり、非標準オプションxargsと組み合わせて使用​​する以外には使用しないでください。-0それでも、この場合、それを行う利点は考えられません。find から直接 rm を実行するだけです。

find . -type f -name '"*".csv' -exec rm -f -- {} +

動作します。GNU find がある場合は、 も使用できます-delete

于 2013-03-07T23:25:16.887 に答える
1

これを試して:

find yum/yum_hyd -name "\"*\".csv" |sed 's/"/\\"/g'|xargs rm

説明:

"に置き換えたい\"。しかし、直接書く場合\"、sedはそれをプレーンと見なし"、バックスラッシュをエスケープする必要があります。そう\\"動作します。

于 2013-03-07T21:32:44.557 に答える
1

私は最近までこのオプションを知りませんでしたが、次の方法でファイルの inode を一覧表示できます。

$ ls –il

出力では、最初の列に inode 値が含まれていることがわかります。次に、その値をfind -inum問題のあるファイルに使用して、それらを削除できます。出力

2616366 -rw-r--r-- 1 など

$ find . -inum 2616366 -exec rm -f {} \;

これにより、その特定の inum を持つファイルが削除されます。

テストとして、以下を実行してファイルを見つけることができます。

ls -il \"* | awk '{print $1}' | xargs -n1 -I {} find -inum {}

満足したら、このコマンドの最後の部分 (「find -inum {}」) を「rm」コマンドに置き換えます。

これは、スーパーユーザーに関する質問にも似ています

于 2013-03-07T21:34:46.000 に答える