リダイレクトされたファイルリストの出力でファイル名を無視する方法は?

リダイレクトされたファイルリストの出力でファイル名を無視する方法は?

コマンドを使用してディレクトリとそのサブディレクトリ内のすべてのファイルを見つけて、出力を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' -- "$@"
}

おすすめ記事