Saya memiliki banyak file di folder, bernama like 00802_Bla_Aquarium_XXXXX.jpg
. Sekarang saya harus menyalin setiap file ke- 4 ke subfolder, dengan mengatakan selected/
.
00802_Bla_Aquarium_00020.jpg <= this one
00802_Bla_Aquarium_00021.jpg
00802_Bla_Aquarium_00022.jpg
00802_Bla_Aquarium_00023.jpg
00802_Bla_Aquarium_00024.jpg <= this one
00802_Bla_Aquarium_00025.jpg
00802_Bla_Aquarium_00026.jpg
00802_Bla_Aquarium_00027.jpg
00802_Bla_Aquarium_00028.jpg <= this one
00802_Bla_Aquarium_00029.jpg
Bagaimana saya melakukan ini?
ls
. Lihat juga stackoverflow.com/q/4553751/789593 yang menanyakan setiap baris kedua.for n in $(seq -w 20 4 200); do cp "00802_..._00${n}" ...; done
Jawaban:
Dengan zsh, Anda dapat melakukan:
MUNGKIN, ide yang sama, hanya sedikit lebih verbose:
Karena nama file tersebut tidak mengandung karakter kosong atau karakter pengganti, Anda juga dapat melakukan:
sumber
for i do
adalah standar dan sebenarnya lebih portabel daripadafor i; do
dan merupakan cara kanonik untuk mengulang parameter posisi.Dalam bash, kemungkinan lucu, itu akan bekerja dengan baik di sini:
Itu jelas jawaban terpendek dan paling efisien: tidak ada subshell, tidak ada loop, tidak ada pipa, tidak ada
awk
proses eksternal lingkungan; hanya satu garpu untukcp
(yang tidak dapat Anda hindari pula) dan satu ekspansi bash brace dan glob (yang dapat Anda singkirkan sama sekali karena Anda tahu berapa banyak file yang Anda miliki).sumber
cp 00802_Bla_Aquarium_*{03..99..4}.jpg selected
jika Anda mau3 mod 4
. (Saya menggunakan fakta indah bahwa 100 dapat dibagi 4). Sekarang, tentang file-file yang diberi nomor terus-menerus, semua jawaban lain menganggapnya sama.Cukup dengan bash, Anda dapat melakukan:
Pola
./*.jpg
tersebut akan diganti oleh daftar nama file yang diurutkan berdasarkan abjad seperti yang dinyatakan oleh bash man, jadi itu harus sesuai dengan tujuan Anda.sumber
for
lingkaran bisa diganti dengan hanya baris ini:(((++n)%4)) || cp "$file" selected/
.;-)
. Masalahnya adalah bahwa Anda forking padacp
untuk setiap file yang tidak benar-benar efisien.Jika Anda telah
ruby
menginstal, Anda dapat menggunakan one-liner berikut. Perhatikan bahwa ini mengasumsikan bahwa direktori yang dipilih ada.Dibutuhkan daftar semua file dengan ekstensi .jpg di direktori saat ini dan mengirisnya menjadi daftar empat elemen dan menyalin elemen pertama dari setiap daftar tersebut ke direktori yang dipilih di direktori saat ini.
sumber
Jika Anda tahu Anda tidak akan memiliki baris baru dalam nama file Anda, Anda dapat menggunakan:
sumber
Anda dapat menggunakan manajer file GUI dan mengubah ukuran perbatasan jendela hingga setiap 5 file menempati satu baris, dan kemudian menggunakan mouse untuk memilih kolom pertama ...
sumber
Melihat stackoverflow.com/q/4553751/789593 yang menawarkan solusi untuk menyalin setiap detik seperti yang disebutkan @NN, solusi yang sangat sederhana adalah:
Ini mungkin tidak sangat efisien karena memerlukan sedikit langkah copy tambahan itu harus sangat mudah dilakukan.
sumber