Bagaimana cara memindahkan semua file output dari perintah?

22

Saya punya perintah grep ini untuk menemukan file tanpa kata lampiran di dalamnya.

grep -L -- Attachments *

Saya ingin memindahkan semua file yang dihasilkan dari perintah itu. Bagaimana saya melakukan itu di bash? Apakah saya menggunakan pipa? Apakah saya menggunakan pernyataan yang lebih bertele-tele jika / kemudian dalam naskah lengkap?

bernie2436
sumber

Jawaban:

18

Jika Anda tahu bahwa tidak ada satu pun jika nama file berisi baris, tab, spasi atau kombinasi glob baru yang dapat menghasilkan kecocokan, ini mungkin lebih mudah untuk kasus satu kali:

mv $(grep -L Attachments *) dest_dir
Graeme
sumber
36

Yang ingin Anda lakukan adalah menggunakan opsi pipa dan greps -Z:

Menggunakan GNU grep dan mv

grep -LZ -- Attachments * | xargs -0 mv -t target_directory

The -Zdikombinasikan dengan xargs -0menangani setiap nama file dengan karakter khusus.

Menggunakan BSD grep dan mv (seperti pada MacOS X)

grep -L --null -- Attachments * |
while IFS= read -r -d "" file; do 
    mv "./$file" target_directory
done

Pada BSD, grep -Zberarti dekompresi , grep --nullbekerja pada BSD dan GNU. BSD mvtidak memiliki opsi-t

Anthon
sumber