Bagaimana saya dapat menemukan file * .mp3 saja dengan perintah rekursif seperti ls -R *.mp3pada direktori yang berisi beberapa sub-direktori dan pada akhirnya salin file-file ini dalam direktori yang saya pilih.
Terima kasih atas dukunganmu.
Bagaimana saya dapat menemukan file * .mp3 saja dengan perintah rekursif seperti ls -R *.mp3pada direktori yang berisi beberapa sub-direktori dan pada akhirnya salin file-file ini dalam direktori yang saya pilih.
Terima kasih atas dukunganmu.
Jawaban:
Perintahnya adalah:
find /path/to/directory -name "*.mp3" -exec cp {} /some/other/dir/ \;
Alternatif:
find /path/to/dir/ -name '*.mp3' | xargs cp -t /target/
Contoh:
alex@MaD-pc:~/test$ ls
1 2 3
alex@MaD-pc:~/test$ ls 1 2 3
1:
1.txt 2.mp3 3.txt
2:
4.txt 5.mp3 6.txt
3:
alex@MaD-pc:~/test$ find . -name "*.mp3" -exec cp {} 3/ \;
alex@MaD-pc:~/test$ ls 3
2.mp3 5.mp3
Untuk informasi lebih lanjut:
man find
xargsbiasanya jauh lebih cepat. Saya baru saja menjalankan tes cepat di sini menemukan banyak file c dan menjalankannya ls -l. Ini 0m2.420s untuk xargsdan 0m25.494s untuk -exec... Jelas dalam hal ini cpoperasi akan mengambil sebagian besar waktu sehingga mungkin tidak masalah tetapi perlu dicatat.
-n`` switch to the perintah cp` untuk menghindari menimpa dalam kasus duplikat nama (atau menulis skrip yang memeriksa duplikat sebelum menyalin dan mengganti nama target yang diperlukan)
Ada juga cara lain untuk melakukannya yang menurut saya akan sesuai dengan tujuan Anda dengan sempurna. Anda dapat menggabungkan finddengan satu whilelingkaran dan bahkan tidak perlu menggunakan salah satu execatau xargssama sekali. Jika, misalnya Anda ingin menyalin mp3sdari folder unduhan ke folder musik Anda, Anda akan menggunakan skrip berikut, yang telah saya gunakan berkali-kali.
Anda dapat memodifikasinya sesuai keinginan dengan mengubah direktori yang findmencari dan menempatkan file yang dihasilkan di dalamnya ; jika tidak ada direktori yang dinyatakan, findakan mencari seluruh folder home. Anda juga dapat mengubah cpke mvatau perintah lain. Ini cukup cepat, karena saya baru saja mengujinya dengan 3945 .jpgfile! Salin ke editor teks, simpan dan kemudian jalankan dengan menjalankan chmod +x myscript.
#!/bin/bash
# a script to recursively find and copy files to a desired location
find ~/Downloads -type f -iname '*.mp3' -print0 |
while IFS= read -r -d '' f;
do cp -- "$f" ~/Music ;
done
Pada wiki Bash yang dicatat ini ditunjukkan betapa bermanfaatnya menggabungkan whileloop dan readperintah untuk memproses output dari findperintah; dan cara saya melakukannya memastikan bahwa skrip tidak akan rusak jika ia menemukan nama file dengan spasi atau karakter tak terduga atau khusus lainnya.
Untuk informasi lebih umum tentang findperintah, masukkan di terminal man findatau lihat manual Ubuntu online . Untuk pengantar yang bagus untuk penggunaan find, lihat artikel ini juga.
find ~/Downloads -type f -iname '*.mp3' | while read mp3file; do cp "$mp3file" ~/Music; donesederhana?
-n`` switch to the perintah cp` untuk menghindari menimpa dalam kasus duplikat nama (atau menulis skrip yang memeriksa duplikat sebelum menyalin dan mengganti nama target yang diperlukan)
find /path/to/dir/ -name '*.c' | xargs cp -t /target/