ここで提供された答えを試してみましたが、うまくいかないようです。以下は、CentOSシステムのこのディレクトリからindex.phpプレフィックスが付いたすべてのファイルを削除しようとしたコマンドです。最初の2人は逃げているようだったが、何もしなかったのですか?
$ find . -prune -name 'index.php.*' -exec rm {} +
$ find . -prune -name 'index*' -exec rm {} +
$ rm index.php*
-bash: /usr/bin/rm: Argument list too long
答え1
テストファイルのテストデータセットがあるとします。
$ tree
.
├── index.php
├── index.php.bar
├── index.php.foo
├── keppme.php
└── level1
├── index.php
├── index.php.l1
├── keepme.php
└── level2
├── index.php
├── index.php.foo
└── keepme.php
次に始まるすべてのindex.php
ファイルを削除します。
$ find . -type f -name 'index.php*' -delete
その後、テストファイルは次のようになります。
$ tree
.
├── keppme.php
└── level1
├── keepme.php
└── level2
└── keepme.php
拡張後に追加された項目.php
(例lindex.php.foo
:)を削除し、次のままにしますindex.php
。
$ find . -type f -name 'index.php.*' -delete
これにより、テストデータに以下が表示されます。
$ tree
.
├── index.php
├── keppme.php
└── level1
├── index.php
├── keepme.php
└── level2
├── index.php
└── keepme.php
-delete
xargs
オプションを使用する代わりに、ファイルを並列に削除することもできます。場合によっては、大容量ファイルコレクションの場合、それらを削除するとプロセス全体が高速化される可能性がありますが、必ずしもそうではありません。
rm
100
呼び出しごとの最大ファイル数を使用して、各コア/ CPUでコマンドを実行しますrm
。
$ find . -type f -name 'index.php.*' -print0 | xargs -r0 -P $(nproc) -n 100 rm
答え2
index*
ただ削除削除したいとします。現在のディレクトリ、これがあなたが使用するものです-prune
。
-prune
使用してみんなパス名を見つけると、最上位の検索パスにfind
降りるのを効果的にブロックできます。.
したがって、どのfind
コマンドも何もしません。
index*
現在のディレクトリのすべてのファイル(以下のファイルを除く)を削除するには、標準を使用します。
find . ! -path . -prune -type f -name 'index*' -exec rm {} +
または非標準
find . -maxdepth 1 -type f -name 'index*' -delete
または単にシェルループを実行してください:
for name in ./index*; do rm "$name"; done
上記のシェルループは次のとおり-type f
ではありません。find
for name in ./index*; do
[ -f "$name" ] && [ ! -L "$name" ] && rm "$name"
done
または以下を使用してzsh
:
for name in ./index*(.N); do rm $name; done
または
autoload -U zargs
zargs -r -- index*(.N) -- rm --
…rm
できるだけ少ない回数で電話をかけました。
答え3
この場合
$ rm index.php* -bash: /usr/bin/rm: Argument list too long
あなたはこれを試すことができます
$ printf "%s\0" index.php* | xargs -0 rm
答え4
特定の名前で始まるファイルを削除するコマンド:
a) rm -rf <file name>* (in case it gives an error **Argument list too long** then use option b)
b) find . -type f -name '<file name>*' -delete
注:私の例では、ファイル名は次に終わります。sess_