Saya memiliki sekelompok file yang memiliki :
(titik dua) di dalam namanya. Saya perlu mengganti :
dengan -
(dash).
Apakah ada cara mudah untuk melakukan ini dalam naskah?
Contoh Nama File: 2013-10-11:11:52:08_055456663_045585_.txt
Seharusnya 1-liner sederhana (mengasumsikan sh
shell yang kompatibel dengan Posix ):
for f in *:*; do mv -v "$f" $(echo "$f" | tr ':' '-'); done
Penjelasan:
for ... in ...; do ...; done
adalah sebuah loop
*:*
cocok dengan semua file dan direktori di direktori saat ini yang ada :
di namanya
f
ditugaskan pada gilirannya untuk masing-masing nama file dalam loop
mv
mengganti nama argumen pertamanya menjadi argumen kedua; -v
(verbose) memintanya untuk mencetak apa fungsinya; opsi ini khusus untuk GNU-utils , sehingga tersedia di Linux tetapi tidak untuk Solaris
$(...)
mengeksekusi kode dalam sub-shell dan mengganti output
echo
mencetak argumennya ke output standar
tr
membaca output standar dan menerjemahkan karakter sesuai dengan peta yang disediakan
Jika Anda menggunakan bash , Anda dapat menghindari melahirkan shell tambahan ( $()
) dengan sub-proses ( tr
) dengan mengganti $(...)
dengan ${f//:/-}
.
for f in
loop ... adalah loop yang mengulang semua file dalam direktori saat ini di mana file harus cocok*:*
. (Apa yang terjadi dengan dir yang cocok?). Perintah pindah adalah pindah nama lama dengan nama baru di mana nama baru dihasilkan dengan mengeksekusi shell dengan$( subshell here )
. Apa yang dilakukan, ...$(echo "$f" | tr ':' '-')
dengan"${f//:/-}"
dan menghindari panggilan subkulit, pipa, dan program eksternal. Saya pikir ini bashism, tapi eh. Lihat di sini .Seperti yang dinyatakan dalam pos lain oleh saya
rename
alat ini bisa melakukan trik untuk Anda. Anda hanya perlu mengetikrename s/:/-/ <files to rename>
ini menggantikan setiap titik dua dengan tanda hubung di semua file yang Anda beri nama di akhir, yaitu2013-10-*
Inilah tautan ke Posting saya yang lain
sumber
Saya yakin pro UNIX bisa melakukan ini dengan bash, tapi inilah versi cepat dan kotor saya dengan ruby.
set path_to_files ke path ke file yang salah nama Anda. simpan kode di atas dalam file bernama rename.rb lalu:
sumber
Jika Anda hanya memiliki satu atau beberapa file, ini dapat melakukan penggantian nama untuk Anda:
p="201*"
.old_name=$(ls | grep $p)
.Simpan nama file baru dengan penggantian karakter yang diperlukan:
Pembersihan bonus :
a. Jika demi keseragaman Anda ingin mengganti tanda hubung (
-
) bersama titik dua (:
) dengan garis bawah (_
), Anda dapat melakukan ini:b. Jika Anda ingin garis bawah terakhir (sesaat sebelum
.txt
) hilang, tetapkannew_name
variabel sebagai:mv $old_name $new_name
NB:
mv
akan gagal jika ada nama file dalam operasi penggantian nama yang adaspaces
di dalamnya. Dalam hal itu, bungkus variabel yang sesuai dalam tanda kutip, seperti:mv "$old_name" $new_name
ATAUmv $old_name "$new_name"
ATAUmv "$old_name" "$new_name"
Satu kalimat
sumber
menggunakan renamer :
sumber
rename
adalah alat yang sudah diinstal pada banyak distribusi linux. Tapi saya pikir untuk Windows alat ini mungkin bagus.Ini mungkin berlebihan tetapi Anda dapat mengganti nama karakter khusus dengan skrip di tautan yang disediakan dalam jawaban ini:
/superuser//a/858671/365691
sumber