Menggunakan ekspresi reguler dengan cp


11

Ini pertanyaan sederhana. Saya mencoba untuk menyalin semua file di direktori saat ini yang dimulai dengan "sumbu-2" dan diakhiri dengan ".jar" ke direktori target, katakanlah itu ~ / MyDirectory. Pikiran pertama saya adalah mencoba

cp '^axis2.*jar$' ~/MyDirectory

Tapi ini tidak berhasil. Saya bahkan tidak yakin dapat menggunakan ekspresi reguler dengan cp. Saya juga belum benar-benar menggunakan ekspresi reguler untuk sementara waktu dan sintaks saya bisa benar-benar mati. Ketika saya mencoba cp ini hanya menampilkan pesan kesalahan "Tidak ada file atau direktori". Adakah yang punya saran tentang bagaimana cara melakukannya? Terima kasih!

Jawaban:


15

Shell UNIX menggunakan pola glob , bukan ekspresi reguler. Jadi, jika Anda ingin mencocokkan nama file yang dimulai dengan axis2dan diakhiri dengan .jar, Anda menggunakan:

cp axis2*.jar /destination/directory

Terima kasih banyak! Saya mengetahuinya sendiri, tetapi saya tidak tahu tentang pola glob sehingga itu membantu dan informatif.
Nick Van Hoogenstyn

7

Jika Anda memiliki GNU finddan GNU cp, Anda dapat menggunakan ekspresi reguler seperti pada perintah berikut:

find . -maxdepth 1 -regextype posix-basic -regex '.*/axis2[^/]*jar$' \
       -exec cp -t ~/MyDirectory {} +

Ini bisa berguna jika baik pola glob maupun bash extended pola glob tidak sesuai dengan kebutuhan Anda.


0

Saya sangat suka sintaks regex dari renameskrip perl (oleh Robin Barker dan Larry Wall), misalnya:

rename "s/OldFile/NewFile/" OldFile*

OldFile.cdan OldFile.hdiganti namanya menjadi NewFile.cdan NewFile.h, masing-masing

Saya hanya menginginkan hal yang sama persis dengan perintah salin:

copy "s/OldFile/NewFile/" OldFile*

Jadi saya menggandakan skrip itu dan mengubah pernyataan ganti nama untuk disalin File::Copy. Et voila! Perintah salin dengan sintaks perl-regex: jcward / vopy .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.