Saya memiliki direktori yang saya coba bersihkan yang berisi file dan subdirektori. Yang saya coba lakukan adalah sederhana: pindahkan semua file ke direktori lain, tetapi biarkan semua sub-direktori sebagaimana adanya.
Saya sedang memikirkan sesuatu seperti:
mv [*_but_no_dirs] ./other_directory
Sepertinya harus ada cara sederhana untuk melakukan ini dengan wildcard *
dan regex ...
Adakah yang punya ide?
mv **/*(.) ./other_directory
- dengan bash Anda harus menggunakan perintah eksternal sepertifind
.Jawaban:
Regex tidak terlibat di sini. Wildcard di bash (seperti kebanyakan shell lainnya) hanya cocok dengan file berdasarkan nama file, bukan berdasarkan tipe file atau karakteristik lainnya. Ada satu cara untuk mencocokkan berdasarkan jenis: menambahkan
/
di akhir pola membuatnya hanya cocok dengan direktori atau tautan simbolik ke direktori. Dengan cara ini, Anda dapat memindahkan direktori, lalu memindahkan apa yang tersisa, dan memindahkan direktori kembali - rumit tetapi berfungsi.Cara standar untuk mencocokkan file berdasarkan jenis adalah dengan menelepon
find
.Di zsh, Anda dapat menggunakan kualifikasi glob untuk mencocokkan file berdasarkan jenis. The
.
kualifikasi sesuai file biasa; gunakan^/
untuk mencocokkan semua non-direktori, atau-^/
juga untuk menyertakan tautan simbolik ke direktori.Dalam shell apa pun, Anda cukup loop.
sumber
Anda bisa menggunakan sesuatu seperti
Pertama kita gunakan
find
untuk melihat hanya di dalam directoy saat ini, kemudian kita mengabaikan direktori dengan menggunakan! -type d
akhirnya kita mengeksekusish
dan memindahkan semuanya ke direktori tujuan. Anda mungkin mencoba{} +
pada akhirnya yang akan lebih cepat.sumber
-exec sh -c 'mv "$@" MYDIR' _ {} \;
bukan-exec mv {} MYDIR \;
? Hanya untuk mendapatkan sesuatu yang dapat disederhanakan dengan mengubah\;
ke+
? Anda dapat melakukannya dengan-exec mv -t MYDIR {} +
formulir.-t
bendera itu. Saya juga menjelaskan dalam jawaban bahwa+
lebih cepat tetapi tidak semuafind
versi mendukungnya. Jadi kode di atas cukup kompatibel denganfind
shell apa pun yang digunakan.find
shell atau apa pun yang digunakan." Benar, tetapi begitu jugafind … -exec mv {} MYDIR \;
, dan yang menggunakan sumber daya lebih sedikit daripada… -exec sh -c 'mv "$@" MYDIR' _ {} \;
.Ini berpotensi agak berbahaya tapi
Karena cp dan rm tidak akan beroperasi pada direktori tanpa -r switch.
sumber
Saya sarankan hanya melakukan
mv *.* destination/
dengan tujuan / menjadi folder yang Anda pindahkan.sumber
*.*
akan memindahkan beberapa direktori dan meninggalkan beberapa file, yang bukan yang diinginkan penanya.sumber