2016-11-04 4 views
1

パッケージを削除した後、それらのうちのいくつかは私が実際に使用していないファイルを残しているので、サーバ全体を最初から復元するのではなく削除します。locateからファイルを取得し、次にそれらを削除します

私はファイルとディレクトリの長いリストを取得し、私はそれらを削除したい

sudo locate logstash 

を使用しています。

私が見たoldschoolの方法があり、それはfile.txtにこのリストを入れて、それを行ごとに読み込んで削除します。

このリストに表示されている項目を削除するには、より高速なbash方法がありますか?

さらに、ディレクトリまたはファイルかどうかを確認するにはどうすればよいですか。

答えて

3

あなたはこれを試すことができます(または単に再帰的削除する):

locate logstash | xargs -I{} rm -rf {} 

注:locateは、あなたが削除したいの有効なファイルを与えていることを確認してください。

+0

を取得します。 |ログインxargs rm -rfI – SpaceCowboy

+0

@SpaceCowboyいいです、私もそれを使用します! –

2

それは後悔するより安全であることが良いでしょう:

#!/usr/bin/env bash 

sudo locate -0 logstash >> /tmp/logstash      # Null separated to tmp file 
xargs -0 -I {} -n1 -P0 echo {} < /tmp/logstash    # Print list to check 

read -p "Do you want to DELETE these items (Y/N)?" 
[ "$(echo $REPLY | tr [:upper:] [:lower:])" == "y" ] || exit # Verify 

xargs -0 -I {} -n1 -P0 sudo rm -rf {} < /tmp/logstash   # Same list to delete 

manページ(私の強調)で説明したように、ヌル区切りのリストを使用して、xargsやファイルを使用するときには、良い習慣です:

Unixのファイル名に空白や改行が含まれることがあるので、この のデフォルトの の動作には問題があります。空白や改行を含むファイル名は、xargsによって間違って処理されます。このような状況では、はオプションを使用すると、 を使用する方が良いでしょう。 このオプションを使用する場合は、xargsの 入力を生成するプログラムもnull文字をセパレータとして使用する必要があります。たとえば、 プログラムがGNU findの場合、-print0オプションがこれを行います。

locateは、出力するオプションが-0です。

+1

「y」と一致しないものが「n」とみなされることを示すために、プロンプトを '[y/N]'と書いておきます - これは対話型プログラムの一般的な規約です。 –

+0

ありがとう@TobySpeight、大文字と小文字を区別しますか? – hmedia1

+0

いいえ、規約では大文字でデフォルトを書いていますが、いずれの場合も受け入れます。スクリプトによっては、[Yy] *)の 'case" $ REPLY "trueを使用するものもあります。 *) 出口 ;;例えば、「esac」である。 –

0

この回答は、GNU coreutilsの使用を前提としています。ここに示したオプションの中には、POSIX標準へのGNU拡張があり、他の実装では存在しません。

xargsは、標準入力をプログラム引数に変換するツールです。

は、あなたがNULLで区切られた出力を生成するために -0locateを起動したいと思う、それを安全に使用するために、そして xargs-0でヌル区切りの入力を理解すること。これにより、あなたのファイル名に問題なく空白(改行を含む)を含めることができます。

locateは常に絶対パス名を出力しますが、それはそう、--と引数から良い習慣を明示的に別のオプションです

を我々はまた、xargsのに-rを渡しますので、一致がない場合、我々はrmを実行しません-で始まる名前の驚きを避けるためです。

-Iオプションをrmに設定すると、引数が4つ以上ある場合、またはディレクトリがある場合に削除するファイルの確認を求めることもできます。考えているすべてで

、あなたは個人的に私は念のために-I引数を追加します

locate -0 logstash | xargs -r0 rm -Ir -- 
関連する問題