find コマンドの出力をソートして再読み込みしてファイルを削除します。

find コマンドの出力をソートして再読み込みしてファイルを削除します。

次のbashスクリプトは、すべてのディレクトリを検索し、各ディレクトリにあるファイルの数を一覧表示します。

以下は、私が直接インストールしたRインストールのサンプル出力テストです。まさに私が必要だったのです。

find . -mindepth 6  -type d -print0 | while IFS= read -r -d '' i ; do echo -n $i": " ; ls -p "$i" | grep -v / | wc -l ; done

私の質問は、この出力「files.txt」(たとえば)を次のような他のステートメントでどのように読み取ることができるかということです。

xargs rm -f files.txt    # ("<" is missing)

すべてのディレクトリを含むfiles.txtの内容を読み、複数のファイルを含むディレクトリ内のすべてのファイルを削除しますか(フォルダ以外のファイルのみ、ディレクトリ構造を変更しないでください)。

以下の出力では、以下を除く各ディレクトリのすべてのファイルが削除されます。

./R/R-3.6.1/src/library/tcltk/R/windows: 1  
./R/R-3.6.1/src/library/compiler/man: 1   
./R/R-3.6.1/src/library/compiler/R: 1

出力例:

./R/R-3.6.1/src/library/tools/man: 64   
./R/R-3.6.1/src/library/tools/tests: 3   
./R/R-3.6.1/src/library/tools/src: 16  
./R/R-3.6.1/src/library/tools/po: 23  
./R/R-3.6.1/src/library/tools/R: 49    
./R/R-3.6.1/src/library/tcltk: 4   
./R/R-3.6.1/src/library/tcltk/man: 14  
./R/R-3.6.1/src/library/tcltk/exec: 12  
./R/R-3.6.1/src/library/tcltk/src: 7   
./R/R-3.6.1/src/library/tcltk/po: 21  
./R/R-3.6.1/src/library/tcltk/R: 6   
./R/R-3.6.1/src/library/tcltk/R/unix: 2  
./R/R-3.6.1/src/library/tcltk/R/windows: 1  
./R/R-3.6.1/src/library/tcltk/demo: 5  
./R/R-3.6.1/src/library/compiler: 4  
./R/R-3.6.1/src/library/compiler/man: 1  
./R/R-3.6.1/src/library/compiler/noweb: 2  
./R/R-3.6.1/src/library/compiler/tests: 10  
./R/R-3.6.1/src/library/compiler/po: 10  
./R/R-3.6.1/src/library/compiler/R: 1   
./R/R-3.6.1/src/library/graphics: 4

ありがとうございます。

ベストアンサー1

ファイルを読み取るには、各行がリストされているディレクトリ内のすべてのファイルを削除するというrm意味のある形式である必要があります。rm

rm ./path/to/delete/*

だから…。

sed -E "s|:\s[0-9]+$|/*|" files.txt

ファイルの各シーケンスの空白、1つ以上の数字とsed行末:\s[0-9]+$/*

そのまま入力するとrmディレクトリの削除も要求されるためエラーとなりますので、メッセージにエラーが表示された場合はstderrをリダイレクトしてください。

rm $(sed -E "s|:\s[0-9]+$|/*|" files.txt) 2>/dev/null

ディレクトリ名にスペースが含まれていると失敗します。この場合、まだファイルをに提供する必要があります。後で変更してリセットrmできます。IFS

OFS=$IFS; IFS=$'\n'; rm $(sed -E "s|:\s[0-9]+$|/*|" files.txt) 2>/dev/null; IFS=$OFS

おすすめ記事