以下は、絶対にどのパスでも機能するはずです。
head を使えるように関数を宣言する そして tail NUL 区切りの出力:
nul_terminated() {
tr '\0\n' '\n\0' | "example@unixlinux.online" | 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 ) 個別に (\; );tr '\0\n' '\n\0' );"tail -n 2) を取得します。 、 "example@unixlinux.online" );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
残念ながら、これはスペースや改行を含むファイル名では機能しません。