Salin berbagai file dalam baris perintah (ZSH / BASH)


13

Saya memiliki daftar file dengan angka berurutan sebagai sufiks. Saya ingin menyalin hanya kisaran file-file ini. Bagaimana saya bisa menentukan rentang sebagai bagian dari perintah cp saya.

$ls
P1080272.JPG* P1080273.JPG* P1080274.JPG* P1080275.JPG* P1080276.JPG* P1080277.JPG*
P1080278.JPG* P1080279.JPG* P1080280.JPG* P1080281.JPG* P1080282.JPG* P1080283.JPG*

Saya ingin menyalin file dari P1080275.JPG ke P1080283.JPG dengan sesuatu yang mirip dengan:

$cp P10802[75-83].JPG ~/Images/.

Apakah ada cara untuk melakukan ini?

Jawaban:


25

Anda sangat dekat. Pertanyaan Anda hampir merupakan sintaks yang benar:

cp P10802{75..83}.JPG ~/Images

9

Untuk beralih di rentang bash:

for x in {0..10}; do echo $x; done

Menerapkan hal yang sama dalam kasus Anda:

for x in {272..283}; do cp P1080$x.JPG ~/Images; done

Ini berfungsi, tetapi saya lebih suka jawaban @glenn jackman karena tidak meminta konstruk pemrograman apa pun.
Amjith

4

Zsh, dengan opsi extendedglob memiliki operator globbing (pencocokan pola).

setopt extendedglob
echo P10802<75-83>.JPG

akan cocok dengan nama file di direktori saat ini yang cocok dengan pola itu (berhati-hatilah bahwa P1080275.JPG cocok tetapi begitu juga P108020000000075.JPG)

Di ujung lain, operator ekspansi string {x ... y} (didukung oleh zsh dan versi terbaru dari bash dan ksh93), memperluas ke string dari x ke y, terlepas dari file apa yang ada di direktori saat ini.

cp P10802<75-83>.JPG ~there

akan menyalin file yang cocok, begitu juga

cp P10802{75..83}.JPG ~there

Tetapi Anda akan mendapatkan kesalahan jika misalnya P1080281.JPG tidak ada.


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.