コマンドを使用してディレクトリとそのサブディレクトリ内のすべてのファイルを見つけて、出力をresult.txtファイルにリダイレクトすると、result.txtファイルからresult.txtを含むすべてのファイルを取得できますが、望ましくありませんでした。結果。txt。
私がやっているように
find . -type f > allfiles.txt
その結果、私が得るものは
./test1/test3/file4
./test1/file3
./test2/test4/file6
./test2/file5
./allfiles.txt
この状況を避ける方法は?
ベストアンサー1
具体的には、find
次のようにできます。
find . ! -path ./allfiles.txt -type f > allfiles.txt
より一般的には、moreutilsコマンドを使用して、コマンドが返されるまで出力ファイルの作成を遅らせることができますsponge
。
ls -lRA | sponge allfiles.txt
ただし、これは出力全体をメモリに保存することを意味します。
moreutilsがインストールされていない場合(通常はデフォルトではインストールされていない)、次のように実装できますsponge
。
sponge() {
perl -0777 -e '$text=<STDIN>;
open STDOUT, ">", shift or die$!;
print $text' -- "$@"
}