GNU/Linux >> Linux の 問題 >  >> Linux

「find」から「tail」へのパイプ

以下は、絶対にどのパスでも機能するはずです。

head を使えるように関数を宣言する そして tail NUL 区切りの出力:

nul_terminated() {
    tr '\0\n' '\n\0' | "[email protected]" | tr '\0\n' '\n\0'
}

次に、それを使用して、tail を通過した後、検索から NUL で区切られたパスのリストを取得できます。 :

find . -exec printf '%s\0' {} \; | nul_terminated tail -n 2

それを xargs にパイプすることができます オプションを追加します:

find . -iname "*FooBar*" -exec printf '%s\0' {} \; | nul_terminated tail -n 2 | xargs -I "{}" -0 cp "{}" "dest"

説明:

<オール>
  • find 現在のディレクトリ内のファイル (. ) 以下の foobar を含む名前 (i のため、大文字と小文字は区別されません) -inameで );
  • ファイルごとに実行 (-exec ) コマンド
  • 各ファイル パスを出力します ({} ) に続く NUL 文字 (\0 ) 個別に (\; );
  • 改行と NUL 文字を交換 (tr '\0\n' '\n\0' );"
  • 最後の 2 行 (つまり、パス; tail -n 2) を取得します。 、 "[email protected]" );
  • 改行と NUL 文字を再度入れ替えて、NUL で区切られたファイル名のリストを取得します (tr '\0\n' '\n\0' ).
  • xargs コマンドは説明が少し難しいです。 cp ... "dest" もの数をビルドします 最大コマンド長に収まるように必要なコマンド オペレーティング システムの {} を置き換えます コマンド内のトークンと実際のファイル名 (-I "{}" ... "{}" )、パラメーターを読み取るときに区切り文字として NUL 文字を使用します (-0 ).


    試すことができます

    cp $(find . -iname "*FooBar*" | tail -2 ) dest
    

    find . -iname "*FooBar*"|tail -n2|xargs -i cp "{}" dest
    

    残念ながら、これはスペースや改行を含むファイル名では機能しません。


    Linux
    1. 壊れたパイプでTail-fを終了しますか?

    2. フォルダを「tail-f」する方法??

    3. tail:コマンドが見つかりません

    1. Linuxテールコマンドの例

    2. head、tail、less などに渡されたテキストに色を付ける方法はありますか?

    3. テキスト内で繰り返される単語を見つける

    1. tail 以下を使用したログ監視

    2. unix - ファイルの先頭と末尾

    3. カットする配管出力