Mencoba membuat skrip shell untuk memindahkan semua file dengan tahun tertentu di namanya ke direktori berbasis tahun

3

Ini adalah blok kode yang saya miliki sejauh ini. Tidak peduli apa yang saya lakukan dengan perintah find, saya sepertinya tidak bisa berfungsi sesuai yang saya inginkan. Mencoba untuk memindahkan semua file dengan nama tahun yang panjang ini ke direktori bernama mereka sendiri.

for i in 2008 2009 2010 2011
do
mkdir /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/$i
find /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/ -iname '*$i*' -maxdepth 1  -type f  -exec mv -n {} /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/$i/ \;
done
GentilmanMyles
sumber

Jawaban:

0

Menggantikan:

find /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/ -iname '*$i*' -maxdepth 1  -type f  -exec mv -n {} /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/$i/ \;

Dengan:

find /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/ -maxdepth 1 -iname "*$i*" -type f  -exec mv -n {} /Users/benjaminbaker/Documents/Thesis/Data/EIA_AMI/Test/$i/ \;

Masalahnya adalah itu $i tidak berkembang dalam tanda kutip tunggal. Jadi, gunakan "*$i*" di tempat '*$i*'.

Juga, find lebih suka bahwa Anda menentukan opsi, seperti -maxdepth, sebelum tes, seperti -iname. Dalam kode di atas, urutannya diubah.

Terakhir, di dua tempat yang Anda gunakan ...Test/$i tanpa tanda kutip. Ini bekerja di sini hanya karena $i tidak mengandung spasi Jika ya, itu harus dalam tanda kutip ganda.

John1024
sumber
Membuatnya sedikit lebih baik, tetapi masih tidak mengeksekusi dengan benar. $ I kedua sedang diganti dengan apa-apa, jadi ia mencoba untuk memindahkan file kembali ke direktori asal yang sama
GentilmanMyles
@GentilmanMyles Ini berfungsi dengan baik untuk saya. Jika tidak bekerja untuk Anda, Anda harus lebih spesifik tentang apa yang sebenarnya Anda lakukan. Misalnya, jika $i memiliki nilai, shell tidak akan pernah menggantinya dengan "tidak ada".
John1024
Atau kadang-kadang saya hanya menjadi bodoh dan mengacaukan loop saya ketika menambahkan ini. Terima kasih. Diperbaiki dan bekerja.
GentilmanMyles
@GentilmanMyles Sangat bagus. Senang itu berhasil.
John1024