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 kecp
sebagai argumen agar mengetahui file apa yang akan disalin/destination/folder/
- argumen diteruskan kecp
, memberi tahucp
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