GNU/Linux >> Belajar Linux >  >> Linux

Memipipkan `find` ke 'tail`

Berikut ini harus bekerja di semua jalur.

Deklarasikan fungsi untuk dapat menggunakan head dan tail pada keluaran yang dipisahkan NUL:

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

Kemudian Anda dapat menggunakannya untuk mendapatkan daftar jalur yang dipisahkan NUL dari pencarian Anda setelah melewati tail :

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

Anda kemudian dapat menyalurkannya ke xargs dan tambahkan opsi Anda:

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

Penjelasan:

  1. find file di direktori saat ini (. ) dan di bawahnya dengan nama yang mengandung foobar (tidak peka huruf besar/kecil karena i di -iname );
  2. untuk setiap file, jalankan (-exec ) perintah untuk
  3. cetak setiap jalur file ({} ) diikuti dengan karakter NUL (\0 ) satu per satu (\; );
  4. tukar baris baru dan karakter NUL (tr '\0\n' '\n\0' );"
  5. dapatkan dua baris terakhir (yaitu, jalur; tail -n 2 , "[email protected]" );
  6. tukar baris baru dan karakter NUL lagi untuk mendapatkan daftar nama file yang dipisahkan NUL (tr '\0\n' '\n\0' ).

xargs perintah sedikit lebih sulit untuk dijelaskan. Itu membangun sebanyak cp ... "dest" perintah seperlunya agar sesuai dengan panjang maksimum perintah sistem operasi, menggantikan {} token dalam perintah dengan nama file sebenarnya (-I "{}" ... "{}" ), menggunakan karakter NUL sebagai pemisah saat membaca parameter (-0 ).


Anda dapat mencoba

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

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

Sayangnya ini tidak akan berfungsi dengan nama file yang mengandung spasi atau baris baru.


Linux
  1. Membuat Tail -f Keluar Pada Pipa Rusak?

  2. Grep Dan Ekor -f?

  3. ekor:perintah tidak ditemukan

  1. Contoh Perintah ekor Linux

  2. unix - kepala DAN ekor file

  3. gzip - pengalihan atau perpipaan?

  1. Log menonton menggunakan ekor atau kurang

  2. Output perpipaan untuk dipotong

  3. Apakah ada cara agar teks diteruskan ke kepala, ekor, lebih sedikit, dll. untuk diwarnai?