GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Anda menggunakan ekspresi reguler dengan perintah cp di Linux?

Tidak.

cp perintah tidak memiliki kemampuan untuk memproses argumennya sebagai ekspresi reguler. Bahkan wildcard tidak ditangani olehnya (atau kebanyakan executable); melainkan ditangani oleh shell.

cp test/* test2/ sebenarnya diperluas oleh bash, dan semua cp itu benar-benar melihat argumennya adalah cp test/file1 test/file2 test/file3 test2/ (atau apa pun yang sesuai berdasarkan konten sebenarnya dari test/ ).

Juga, saya tidak memikirkan ekspresi Anda, [^\.php] , akan cocok dengan yang Anda inginkan (tidak hanya cocok dengan file yang berisi .php ).

Anda mungkin ingin melihat find utilitas untuk memfilter daftar file berdasarkan ekspresi reguler, lalu gunakan xargs untuk menerapkan daftar file yang dikembalikan ke cp perintah (menganggap find tidak memiliki penangan bawaan untuk menyalin file; saya tidak terlalu paham dengan alat ini).

Anda dapat mencoba:

find . ! -iregex ".*\.php.*" -exec cp {} /destination/folder/ \;

Ini mengatakan untuk mencari direktori saat ini secara rekursif untuk file yang tidak mengandung ".php" di jalur dan menyalinnya ke /destination/folder/ .

Seperti yang diminta, perincian argumen yang lebih spesifik:

  • . - Lokasi untuk memulai pencarian - dalam hal ini, direktori saat ini
  • ! - Operator "Bukan", balikkan hasil tes berikutnya
  • -iregex - Tes ekspresi reguler case-insensitive. Argumen selanjutnya adalah ekspresi.
  • ".*\.php.*" - Pencocokan ekspresi reguler <Anything>.php<Anything> - File apa pun yang memiliki ".php" di suatu tempat di jalurnya. (Perhatikan, termasuk berada di dalam folder yang berisi ".php" di namanya, Anda memerlukan ekspresi yang lebih kompleks untuk mencocokkan hanya file)
  • -exec - Jalankan perintah jika tes sebelumnya kembali benar. Argumen berikutnya adalah perintah, semua argumen yang tersisa hingga ; diteruskan ke perintah. {} adalah argumen khusus yang mewakili nama file.
  • cp - Perintah yang find` harus dijalankan pada setiap nama jalur yang cocok.
  • {} - Jalur ke file yang ditemukan, diteruskan ke cp sebagai argumen agar mengetahui file apa yang akan disalin
  • /destination/folder/ - argumen diteruskan ke cp , memberi tahu cp di mana file tersebut harus disalin.
  • \; - Ini adalah ; terminator -exec sedang mencari. Kami menghindarinya dengan \ sehingga shell Anda tidak mencoba menguraikannya dan malah memasukkannya sebagai argumen ke perintah (find )

Agak sulit menulis ekspresi reguler yang cocok dengan "string yang tidak memiliki .php ", jadi kami memberi tahu find untuk mencari string yang lakukan berisi .php lalu balikkan hasilnya dengan ! .


Anda dapat menggunakan beberapa alat lain dari konsol, seperti grep dan xargs.

ls -1 some_folder | egrep 'some_extended_regex' | xargs cp -t destination_folder

Linux
  1. Cara menggunakan perintah grep Linux

  2. Cara menggunakan perintah history di Linux

  3. Cara menggunakan perintah "layar" di Linux

  1. Cara Menggunakan Perintah su di Linux dengan Contoh

  2. Cara Menggunakan Perintah w di Linux dengan Contoh

  3. Cara Menggunakan Perintah id di Linux

  1. Cara Menggunakan Perintah jam tangan Linux dengan Contoh

  2. Cara Menggunakan Perintah sejarah Linux

  3. Cara Menggunakan Perintah Linux xargs