次のコマンドは、104.tar
ファイルを除くフォルダ内のすべてのエントリを再帰的に削除します/tmp/CURRENT
。
find /tmp/CURRENT/ -type f ! -name '104.tar' -exec rm -rf {} +
ただし、その下のサブフォルダは繰り返し削除されません/tmp/CURRENT
。
与えると-type d
役に立つかもしれませんが、別のコマンドは必要ありません。私の要件は、以下で試したのと同じ単一のコマンドを使用してファイルとフォルダを削除することですが、役に立ちませんでした。
find /tmp/CURRENT/ -type f -type d ! -name '104.tar' -exec rm -rf {} +
-type
オプションをまったく指定しないと、コマンドはフォルダの/tmp/CURRENT
内容ではなくフォルダ全体を削除します。
注:私のオペレーティングシステムはSun Solaris Sparcです。
何か提案してもらえますか?
ベストアンサー1
使用しながら話し-type f
ます。find
ただファイルだけを考えてください。したがって、ディレクトリが削除されないのは正常です。自己削除を防ぐには、/tmp/CURRENT/
以下を試してください。
find
これをサポートしている場合-mindepth
(find
LinuxシステムのデフォルトであるGNUにはこの機能がありますが、それをサポートできる他のバージョンはわかりませんfind
)、少なくとも1レベル前のコンテンツのみを表示するように指示できます。find /tmp/CURRENT/ ! -name '104.tar' -mindepth 1
!
これを除外するには、2番目の演算子を使用してください。find /tmp/CURRENT/ ! -path /tmp/CURRENT/ ! -name '104.tar'
を使用して
-path
少なくとも1文字で始まり/tmp/CURRENT
、その後に少なくとも1文字が続くパスを見つけます。find /tmp/CURRENT/ -path '/tmp/CURRENT/?*' ! -name '104.tar'
いずれの場合も、コマンドの-exec rm -r {} +
最後に追加して一致を削除できます。
ただし、このコマンドは削除されることに注意してください。すべて特定のファイルを除いて/tmp/CURRENT/104.tar
。したがって、サブディレクトリに/tmp/CURRENT/dir1/104.tar
指定されたファイルまたは他のファイルがある場合、104.tar
そのファイルは削除されます。これが望まない場合は、質問を編集して明確にしてください。
/tmp/CURRENT
もちろん、単にすべての項目を除いて削除したい場合は、/tmp/CURRENT/104.tar
まったく必要ありません。find
Bashで実行できます。
shopt -s extglob
rm -r /tmp/CURRENT/!(104.tar)