Di bawah unix, saya ingin menyalin semua file dengan ekstensi tertentu (semua file excel) dari semua subdirektori ke direktori lain. Saya memiliki perintah berikut:
cp --parents `find -name \*.xls*` /target_directory/
Masalah dengan perintah ini adalah:
Ini menyalin struktur direktori juga, dan saya hanya ingin file (jadi semua file harus berakhir di / target_directory /)
Itu tidak menyalin file dengan spasi di nama file (yang cukup banyak)
Ada solusi untuk masalah ini?
find... exec mv
?Jawaban:
--parents
sedang menyalin struktur direktori, jadi Anda harus menyingkirkannya.Cara Anda menulis ini,
find
eksekusi, dan output diletakkan ke baris perintah sedemikian rupa sehinggacp
tidak dapat membedakan antara spasi yang memisahkan nama file, dan spasi di dalam nama file. Lebih baik melakukan sesuatu sepertidi mana
cp
dijalankan untuk setiap nama file yangfind
menemukan, dan meneruskan nama file dengan benar. Berikut info lebih lanjut tentang teknik ini.Alih-alih semua hal di atas, Anda bisa menggunakan zsh dan cukup ketik
zsh
dapat memperluas wildcard untuk menyertakan subdirektori dan membuat hal semacam ini sangat mudah.sumber
Bash
4.0+ danksh93
juga mendukung**
. Untuk bash, gunakanshopt -s globstar
untuk mengaktifkannya. Untuk ksh, ituset -G
atauset -o globstar
.find . -name '*.xls' -print0 | xargs -0 cp -t destdir
Dari semua hal di atas, saya datang dengan versi ini. Versi ini juga berfungsi untuk saya di terminal pemulihan mac.
Ini akan mencari di direktori saat ini dan secara rekursif di semua sub direktori untuk file dengan ekstensi xsl. Ini akan menyalin semuanya ke direktori target.
cp flags adalah:
sumber
Saya memiliki masalah serupa. Saya menyelesaikannya menggunakan:
The
'{}'
dan";"
mengeksekusi copy pada setiap file.sumber
Saya juga harus melakukan ini sendiri. Saya melakukannya melalui argumen --parents untuk cp:
sumber
Anda dapat menghapus --parents tetapi ada risiko bentrok jika beberapa file memiliki nama yang sama.
sumber