Pertanyaan Bagaimana memindahkan berbagai jenis file ke direktori yang berbeda di shell


Saya memiliki campuran file yang berbeda di folder saya dan saya pikir saya hanya dapat melakukan:

mv '*.(png|jpg|gif)' images/

agar mereka pindah ke folder gambar. Tapi itu tidak berhasil ... pikiran apa pun?


2
2018-05-27 07:49


asal


Saya pikir kesalahan Anda hanyalah bahwa Anda memiliki tanda kutip tunggal di sekitar pola pencocokan file. Anda akan membutuhkan tanda kutip ganda, atau tanpa tanda kutip sama sekali, untuk menggunakan perluasan glob. - Caleb


Jawaban:


Gunakan fitur dalam bash yang disebut brace ekspansi

mv *.{png,gif,jpg} images

4
2018-05-27 11:53





mv *.png *.jpg *.gif images/

harus melakukannya


1
2018-05-27 07:53





Dan shell apa yang Anda gunakan?

Goxu memiliki jawaban yang benar. Tidak ada alasan Anda harus melakukan sesuatu yang lebih esoterik jika Anda dapat melakukannya dengan cara yang lebih sederhana dan mudah dipahami.

Pada akhirnya, shell memperluas perintah untuk memasukkan semua file sebelum meneruskan daftar ke mv perintah, jadi benar-benar tidak ada keuntungan atau kerugian kinerja dengan melakukannya secara berbeda.

Namun, jika Anda menginginkannya Mister Fancy Pants, Anda harus tahu bahwa Bash dan Kornshell (keduanya tersedia di OS X) dapat melakukan hal berikut menggunakan ekspresi glob diperpanjang:

$ mv *(*.png|*.jpg|*.gif) images

Ekspresi glob diperluas (alias pencocokan pola) sangat membantu ketika Anda ingin menghapus semuanya dari direktori kecuali untuk satu file. Misalnya, Anda memperluas arsip tar, dan ingin menghapus semua file kecuali untuk arsip tar:

$ rm -rf !(foo.tar.gz)

Masalahnya dengan Bash adalah Anda harus mengaktifkan fungsi ini melalui shopt perintah pertama:

$ shopt -s extglob

Lihatlah mansion Bash dan lihat bagiannya Pencocokan Pola. Ini berisi banyak trik shell rapi yang tidak terlalu banyak orang ketahui. Ini memberi shell Anda beberapa kekuatan super rahasia, tetapi selalu ingat untuk menggunakan kekuatan-kekuatan itu untuk membantu umat manusia dan tidak pernah melakukan kejahatan.


1
2018-05-27 15:13



*.@(png|jpg|gif) sedikit lebih sederhana. zsh juga mendukung ini ksh pola dengan opsi KSH_GLOB, dan / atau ekuivalennya sendiri dengan opsi EXTENDED_GLOB nya (*.(png|jpg|gif)). - Chris Johnsen