Tidak.
The cp
perintah tidak memiliki kemampuan untuk memproses argumen sebagai ekspresi reguler. Bahkan wildcard tidak ditangani olehnya (atau sebagian besar executable); melainkan mereka ditangani oleh shell.
cp test/* test2/
sebenarnya diperluas oleh bash, dan semua yang cp
benar - benar melihat argumennya adalah cp test/file1 test/file2 test/file3 test2/
(atau apa pun yang sesuai berdasarkan isi aktual dari test/
).
Juga, saya tidak berpikir ekspresi Anda [^\.php]
,, akan cocok dengan apa yang Anda inginkan (tidak hanya cocok dengan file yang berisi .php
).
Anda mungkin ingin melihat ke find
utilitas untuk memfilter daftar file berdasarkan ekspresi reguler, dan kemudian gunakan xargs
untuk menerapkan daftar file yang dikembalikan ke cp
perintah (anggap menemukan tidak memiliki penangan bawaan untuk menyalin file; I ' Saya tidak akrab dengan alat ini).
Anda mungkin mencoba:
find . ! -iregex ".*\.php.*" -exec cp {} /destination/folder/ \;
Ini mengatakan untuk mencari direktori saat ini secara rekursif untuk file yang tidak mengandung ".php" di path dan salin ke /destination/folder/
.
Seperti yang diminta, uraian argumen yang lebih spesifik:
.
- Lokasi untuk memulai pencarian - dalam hal ini, direktori saat ini
!
- "Bukan" operator, balikkan hasil tes berikutnya
-iregex
- Tes ekspresi reguler case-insensitive. Argumen selanjutnya adalah ungkapan.
".*\.php.*"
- Pencocokan ekspresi reguler <Anything>.php<Anything>
- File apa pun yang memiliki ".php" di suatu tempat di jalur. (Catatan, termasuk berada di dalam folder yang berisi ".php" dalam nama, Anda akan memerlukan ekspresi yang lebih kompleks untuk hanya mencocokkan file)
-exec
- Jalankan perintah jika tes sebelumnya mengembalikan nilai true. Argumen selanjutnya adalah perintah, semua argumen tersisa hingga ;
diteruskan ke perintah. itu {}
adalah argumen khusus yang mewakili nama file.
cp
- Perintah yang find` harus dijalankan pada masing-masing nama jalur yang cocok.
{}
- Jalur ke file yang ditemukan, diteruskan cp
sebagai argumen sehingga ia tahu file apa yang akan disalin
/destination/folder/
- Argumen diteruskan ke cp
, memberi tahu ke cp
mana harus menyalin file.
\;
- Ini adalah ;
terminator yang -exec
dicari. Kami menghindarinya dengan \
shell agar shell Anda tidak mencoba menguraikannya dan sebaliknya memberinya sebagai argumen pada perintah ( find
)
Ini agak sulit untuk menulis ekspresi reguler yang cocok "string yang tidak memiliki .php
", jadi kita bukannya memberitahu find
untuk mencari string yang tidak mengandung .php
dan kemudian invert hasilnya dengan !
.
find . -name [^\.php] -exec cp {} /path/to/location \;
hati-hati untuk file dengan karakter khusus.