Jika nama file Anda tidak berisi whitepace dan Anda tidak memiliki subdirektori, Anda dapat menggunakan forloop sederhana :
$ for FILENAME in *; do mv $FILENAME Unix_$FILENAME; done
Jika tidak, gunakan renameperintah yang mudah (yang merupakan skrip perl) - meskipun mungkin tidak tersedia di luar kotak pada setiap Unix (mis. OS X tidak disertakan denganrename ).
@Matteo: Terima kasih petunjuknya: memperbarui jawaban saya dengan peringatan ditambah dua contoh dengan find.
miku
Juga akan merekomendasikan for f in *; do [[ -f ${f} ]] && mv ...; doneuntuk hanya menangkap file (tidak ada sub-direktori, tautan, dll.) ...
twalberg
1
Jika Anda mengutip variabel sebagaimana mestinya, maka for FILENAME in *; do mv "$FILENAME" "Unix_$FILENAME"; doneberfungsi dengan benar terlepas dari karakter apa yang ada di nama file. Itu memindahkan direktori, soket, symlink dan jenis file lainnya juga; Saya kira itu tidak masalah.
Jonathan Leffler
Entah bagaimana ini menambahkan .sebelum semua file saya
nullability
77
Coba renameperintah di folder dengan file :
rename 's/^/Unix_/' *
Argumen ganti nama ( perintah sed s ) menunjukkan untuk mengganti regex ^ dengan Unix_ . Tanda sisipan (^) adalah karakter khusus yang berarti awal baris .
ini luar biasa! saya sarankan untuk menambahkan folder / *, karena * agak berbahaya jika perintah secara tidak sengaja akan terulang di tempat lain
System Rebooter
brew instal ganti nama @OliverPearmain
Felipe Plazas
Contoh untuk mengganti awalan:rename 's/^start_/run_' *
DenisKolodin
36
Saya pikir inilah yang Anda cari:
ls | xargs -I {} mv {} Unix_{}
Ya, itu sederhana namun elegan dan kuat, dan juga satu baris. Anda bisa mendapatkan pengantar yang lebih detail dari saya di halaman: Ubah Nama File dan Direktori (Tambah Awalan)
Berhati-hatilah saat memproses output ls- ini dapat menyebabkan masalah jika ada spasi atau karakter aneh lainnya dalam nama file.
Jonathan Leffler
17
Saya baru-baru ini menghadapi situasi yang sama dan menemukan solusi bawaan yang lebih mudah. Saya membagikannya di sini agar dapat membantu orang lain yang mencari solusi.
Dengan OS X Yosemite, Apple telah mengintegrasikan kemampuan penggantian nama batch langsung ke Finder. Informasi detail tersedia di sini . Saya telah menyalin langkah-langkah di bawah ini juga,
Ubah nama beberapa item
Pilih item, lalu Control-klik salah satunya.
Di menu pintasan, pilih Ubah Nama Item.
Di menu pop-up di bawah Ubah Nama Item Folder, pilih untuk mengganti teks dalam nama, menambahkan teks ke nama, atau mengubah format nama.
Ganti teks: Masukkan teks yang ingin Anda hapus di kolom Temukan, lalu masukkan teks yang ingin Anda tambahkan di kolom "Ganti dengan".
Menambahkan teks: Masukkan teks yang ingin Anda tambahkan di bidang, lalu pilih untuk menambahkan teks sebelum atau sesudah nama saat ini.
Format: Pilih format nama untuk file, lalu pilih untuk meletakkan indeks, penghitung, atau tanggal sebelum atau sesudah nama. Masukkan nama di bidang Format Kustom, lalu masukkan nomor yang Anda inginkan untuk memulai.
Klik Ganti Nama.
Jika Anda memiliki pola umum dalam file Anda daripada Anda dapat menggunakan Ganti teks jika tidak Tambahkan teks juga akan melakukan pekerjaan itu.
Jawaban:
Jika nama file Anda tidak berisi whitepace dan Anda tidak memiliki subdirektori, Anda dapat menggunakan
for
loop sederhana :Jika tidak, gunakan
rename
perintah yang mudah (yang merupakan skrip perl) - meskipun mungkin tidak tersedia di luar kotak pada setiap Unix (mis. OS X tidak disertakan denganrename
).Tinjauan singkat di debian-administration.org:
Jika nama file Anda berisi spasi, ini lebih mudah digunakan
find
, di Linux yang berikut seharusnya berfungsi:-printf
Sayangnya, pada sistem BSD tidak ada pilihan. Tetapi GNU findutils harus dapat diinstal (misalnya pada Mac OS X denganbrew install findutils
).sumber
find
.for f in *; do [[ -f ${f} ]] && mv ...; done
untuk hanya menangkap file (tidak ada sub-direktori, tautan, dll.) ...for FILENAME in *; do mv "$FILENAME" "Unix_$FILENAME"; done
berfungsi dengan benar terlepas dari karakter apa yang ada di nama file. Itu memindahkan direktori, soket, symlink dan jenis file lainnya juga; Saya kira itu tidak masalah..
sebelum semua file sayaCoba
rename
perintah di folder dengan file :Argumen ganti nama ( perintah sed s ) menunjukkan untuk mengganti regex ^ dengan Unix_ . Tanda sisipan (^) adalah karakter khusus yang berarti awal baris .
sumber
's/^/.../'
artinya?'s/^/.../'
adalah argumen ekspresi perl untuk perintah ganti namarename 's/^start_/run_' *
Saya pikir inilah yang Anda cari:
Ya, itu sederhana namun elegan dan kuat, dan juga satu baris. Anda bisa mendapatkan pengantar yang lebih detail dari saya di halaman: Ubah Nama File dan Direktori (Tambah Awalan)
sumber
ls
- ini dapat menyebabkan masalah jika ada spasi atau karakter aneh lainnya dalam nama file.Saya baru-baru ini menghadapi situasi yang sama dan menemukan solusi bawaan yang lebih mudah. Saya membagikannya di sini agar dapat membantu orang lain yang mencari solusi.
Dengan OS X Yosemite, Apple telah mengintegrasikan kemampuan penggantian nama batch langsung ke Finder. Informasi detail tersedia di sini . Saya telah menyalin langkah-langkah di bawah ini juga,
Ubah nama beberapa item
Pilih item, lalu Control-klik salah satunya.
Di menu pintasan, pilih Ubah Nama Item.
Di menu pop-up di bawah Ubah Nama Item Folder, pilih untuk mengganti teks dalam nama, menambahkan teks ke nama, atau mengubah format nama.
Ganti teks: Masukkan teks yang ingin Anda hapus di kolom Temukan, lalu masukkan teks yang ingin Anda tambahkan di kolom "Ganti dengan".
Menambahkan teks: Masukkan teks yang ingin Anda tambahkan di bidang, lalu pilih untuk menambahkan teks sebelum atau sesudah nama saat ini.
Format: Pilih format nama untuk file, lalu pilih untuk meletakkan indeks, penghitung, atau tanggal sebelum atau sesudah nama. Masukkan nama di bidang Format Kustom, lalu masukkan nomor yang Anda inginkan untuk memulai.
Klik Ganti Nama.
Jika Anda memiliki pola umum dalam file Anda daripada Anda dapat menggunakan Ganti teks jika tidak Tambahkan teks juga akan melakukan pekerjaan itu.
sumber
Anda bisa menggunakan
-i
saja-I {}
Ini juga bekerja dengan sempurna.
ls
- mencantumkan semua file dalam direktorixargs
- menerima semua file baris demi baris karena-i
opsi{}
adalah tempat penampung untuk semua file, diperlukan jikaxargs
mendapat lebih dari dua argumen sebagai masukanMenggunakan awk:
sumber
-i
sudah usang, sekarang hanya-I
Juga berfungsi untuk item dengan spasi dan mengabaikan direktori
sumber
Dengan rnm (Anda perlu menginstalnya):
Atau
PS: Saya penulis alat ini.
sumber
rename
tidak berhasil untuk saya, tetapi berhasilrnm
.Situasi:
Kami ada
certificate.key
certificate.crt
di dalam/user/ssl/
Kami ingin mengganti nama apa pun yang dimulai dengan
certificate
menjadicertificate_OLD
Kami sekarang berada di dalam
/user
Pertama, Anda melakukan uji coba dengan
-n
:rename -n "s/certificate/certificate_old/" ./ssl/*
Yang mengembalikan:
rename(./ssl/certificate.crt, ./ssl/certificate_OLD.crt) rename(./ssl/certificate.key, ./ssl/certificate_OLD.key)
File Anda tidak akan berubah, ini hanya uji coba.
Larutan:
Ketika Anda senang dengan hasil tes, jalankan secara nyata:
rename "s/certificate/certificate_OLD/" ./ssl/*
Apa artinya:
`ganti nama" s / SOMETHING / SOMETING_ELSE "PATH / FILES
Tip:
Jika Anda sudah berada di jalur, jalankan seperti ini:
rename "s/certificate/certificate_OLD/" *
Atau jika Anda ingin melakukan ini di sub-direktori mana pun yang dimulai dengan
ss
do:rename -n "s/certificat/certificate_old/" ./ss*/*
Anda juga bisa melakukan:
rename -n "s/certi*/certificate_old/" ./ss*/*
Yang mengganti nama apa pun yang dimulai dengan
certi
sub-direktori mana pun yang dimulai denganss
.Langit adalah batasnya.
Bermain-main dengan regex dan SELALU uji ini SEBELUMNYA
-n
.HATI-HATI INI BAHKAN RENAME NAMA FOLDER YANG SESUAI. Lebih baik
cd
masuk ke direktori dan lakukan di sana. GUNAKAN RISIKO SENDIRI.sumber
find -execdir rename
Ini mengganti nama file dan direktori dengan ekspresi reguler yang hanya mempengaruhi nama dasar.
Jadi untuk awalan Anda bisa melakukan:
atau untuk mempengaruhi file saja:
-execdir
pertamacd
masuk ke direktori sebelum mengeksekusi hanya pada nama dasar.Saya telah menjelaskannya lebih detail di: Temukan banyak file dan ganti namanya di Linux
sumber