it-swarm-id.com

Bagaimana cara mengganti satu char dengan yang lain di semua nama file dari direktori saat ini?

Bagaimana Anda mengganti nama semua file/subdirektori di folder saat ini?

Katakanlah, saya punya banyak file dan subdir yang dengan spasi dan saya ingin mengganti semua spasi dengan garis bawah.

File 1
File 2
File 3
Dir 1
Dir 3

harus diubah namanya menjadi

File_1
File_2
File_3
Dir_1
Dir_3
43
NobbZ

Jika Anda perlu mengganti nama file di subdirektori juga, dan find Anda mendukung -execdir predikat, maka Anda bisa melakukannya

find /search/path -depth -name '* *' \
    -execdir bash -c 'mv -- "$1" "${1// /_}"' bash {} \;

Terima kasih kepada @glenn jackman karena menyarankan -depth pilihan untuk find dan untuk membuat saya berpikir.

Perhatikan bahwa pada beberapa sistem (termasuk yang GNU/Linux), find mungkin gagal menemukan file yang namanya berisi spasi dan juga urutan byte yang tidak membentuk karakter yang valid (tipikal dengan file media dengan nama dengan non- Karakter ASCII yang dikodekan dalam rangkaian karakter yang berbeda dari karakter lokal). Mengatur lokal ke C (seperti dalam LC_ALL=C find...) akan mengatasi masalah tersebut.

37
enzotib

Di Shell apa pun, Anda dapat mengulang file yang namanya berisi spasi. Mengganti spasi dengan garis bawah mudah di bash, ksh dan zsh dengan ${VARIABLE//PATTERN/REPLACEMENT} membangun.

for x in *" "*; do
  mv -- "$x" "${x// /_}"
done

Pada Debian, Ubuntu, dan turunannya, Anda dapat menggunakan Perl rename (distribusi lain mengirimkan program yang berbeda sebagai rename, dan program itu tidak membantu di sini).

rename 's/ /_/g' *

Solusi wajib zsh:

autoload zmv
zmv '(*)' '${1// /_}'

Solusi POSIX wajib:

for x in *" "*; do
  y=$(printf %sa "$x" | tr " " "_")
  mv -- "$x" "${y%a}"
done

Anda dapat menggunakan rename untuk ini (di sini dengan asumsi dari util-linux, bukan Perl satu):

cd /path/to/dir
rename ' ' _ *\ *

Ini akan menemukan semua file dan direktori ruang dalam nama dan mengganti ruang dengan garis bawah. Karena menggunakan pencocokan file glob, Anda harus berada di direktori yang benar untuk memulainya.

Jika Anda ingin melakukan pertandingan rekursif Anda bisa, tetapi Anda mungkin harus menjalankan rename beberapa kali untuk menangkap item apa pun di direktori yang namanya diubah sendiri:

cd /path/to/dir
shopt -s globstar
rename ' ' _ **/*\ *
!!; !!
13
Caleb

Pilihan lain adalah mmv, jika diinstal.

mmv \*\ \* \#1_#2
2
glglgl

Di Debian/Ubuntu, membangun berdasarkan jawaban Caleb dan Gilles, inilah yang berhasil bagi saya untuk mengubah nama file secara rekursif:

cd /path/to/dir
shopt -s globstar
rename 's/ /_/g' **

Catatan: Untuk melihat pratinjau file apa yang akan diubah namanya dan caranya, gunakan -n beralih dengan rename:

rename -n 's/ /_/g' **

Catatan lain: pengaturan globstar membuat ** mencocokkan file di semua subdirektori, jadi jika hanya direktori yang diinginkan, jangan atur globstar atau gunakan * dari pada **.

Satu lagi catatan: Perintah rename perlu dijalankan lebih dari satu kali untuk file dengan banyak kemunculan istilah pencarian.

1
Markus Pscheidt

Jika Anda bukan flash pada ekspresi reguler (saya tidak!), Dan Anda dapat menjalankan aplikasi yang dirancang untuk KDE (baik Anda menggunakan desktop KDE - k atau Anda memiliki perpustakaan diinstal), maka krename adalah utilitas grafis yang hebat yang memungkinkan Anda melihat sebelum dan sesudah sebelum Anda berkomitmen untuk perubahan. Ini memiliki sejumlah transformasi sederhana sebagai opsi dan juga mendukung ekspresi reguler. Anda bahkan dapat menggabungkan beberapa transformasi sekuensial menjadi satu penggantian nama sehingga Anda tidak perlu mendesain transformasi kompleks tunggal yang melakukan semuanya sekaligus. Ini juga memiliki opsi untuk terus mengubah nama file yang sama setelah nama telah diterapkan.

Saya tidak menggunakannya sesering itu, tetapi ketika saya melakukannya, itu benar-benar menyelesaikan pekerjaan dengan cepat dan mudah. Ini sangat berguna ketika mengganti nama berbagai file media yang diunduh sehingga Anda dapat mengelolanya secara seragam di sistem Anda. Membantu mengunduh manual krename secara terpisah sehingga Anda dapat merujuknya saat menggunakan program.

http://www.krename.net/

0
Joe