Saya memiliki koleksi file yang cocok dengan pola seperti 'assignment02.cc', 'assignment02.h', 'assignment02.txt', dll. Saya ingin menyalin / mengganti nama file-file ini menjadi 'assignment03.cc', 'assignment03. h ',' assignment03.txt ', dan seterusnya.
Saya menduga ini harus langsung menggunakan skrip shell dan sed. Sejauh ini saya punya:
OLD_NO=$1
NEW_NO=$2
echo "Moving from $OLD_NO to $NEW_NO"
for name in assignment$OLD_NO.* ; do
newname=$(echo $name | sed 's/\(.*\)$OLD_NO\(.*\)/\1xx$NEW_NO\2/')
echo "$name -> $newname"
# mv -v $name $newname
done
Sayangnya cara saya memohon sed selalu mengembalikan string input $name
dan tidak benar-benar melakukan pencarian / ganti regex.
Catatan: Mencari di internet ada rename
perintah yang memiliki fungsi ini, tetapi itu tidak tersedia di MacBook saya.
shell-script
sed
file-management
rename
Gilles 'SANGAT berhenti menjadi jahat'
sumber
sumber
$OLD_NO
dan$NEW_NO
tidak akan diperluas.newname=$(echo $name | tr $OLD_NO $NEW_NO)
Jawaban:
Menggunakan sed di sini memperkenalkan lebih banyak kompleksitas daripada nilainya. Gunakan fitur manipulasi teks built-in shell. Misalnya,
${name#assignment02}
cabut awalanassignment02
dari$name
.Kutipan ganda tidak diperlukan jika Anda yakin nama file tidak mengandung karakter khusus shell.
Jika Anda memiliki zsh tersedia,
zmv
fungsinya sangat membantu untuk jenis renamings ini.sumber
Kamu sudah berpikir terlalu rumit
'rename' menggantikan arg pertama ('02') dengan arg kedua ('03') atas nama semua file yang diberikan pada arg3 atau sesudahnya (* 02 *)
sumber
rename
perintah dengan sintaks ini adalah utilitas Linux, tidak tersedia di OSX (dan bahkan tidak tersedia dengan nama ini pada kebanyakan Debian dan Ubuntu instalasi).Pendekatan yang berbeda:
Dalam jangka panjang: Cobalah untuk mendapatkan 'rename'
sumber
Salah satu cara Anda dapat melakukannya adalah:
sumber
ls
. Dan menghasilkan skrip shell adalah cara pasti untuk menembak diri sendiri di kepala. Pertanyaan Vault Boy berisi pendekatan yang masuk akal di sisi shell, hanya melewatkan mantra sed yang tepat dan beberapa kutipan.