Bagaimana cara saya mengganti nama banyak file dengan menghapus karakter di bash?


10

Saya harus mengganti nama banyak file dalam direktori dengan menghapus 5 karakter pertama untuk setiap nama file.
Bagaimana saya bisa melakukan ini saya bash / shell? Saya menggunakan Ubuntu 11.10. Terima kasih.

Jawaban:


11

Sederhana untuk loop dengan sedikit sedakan melakukan trik:

% touch xxxxx{foo,bar,baz}
% ls -l xxxxx{foo,bar,baz}
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 xxxxxbar
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 xxxxxbaz
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 xxxxxfoo  
% for file in xxxxx*; do mv $file $(echo $file | sed -e 's/^.....//'); done
% ls -l foo bar baz
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 bar
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 baz
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 foo

Regex pengganti di sedmengatakan untuk mencocokkan lima karakter ( .berarti karakter apa saja) di awal string ( ^) dan menghapusnya.


9

Bash memiliki beberapa kemungkinan scripting yang luar biasa. Ini salah satu caranya:

for file in ??????*; do mv $file `echo $file | cut -c6-`; done

Cara praktis untuk menguji apa yang akan dilakukan adalah menambahkan gema di depan perintah:

for file in ??????*; do echo mv $file `echo $file | cut -c6-`; done

Enam tanda tanya memastikan bahwa Anda hanya mencoba melakukan ini untuk nama file yang lebih panjang dari 5 karakter.


5

Anda dapat menggunakan sed untuk melakukan ini

for file in * ; do mv $file  $(echo $file |sed 's/^.\{5\}//g'); done

5

Semua jawaban bagus, terima kasih. Inilah yang berhasil dalam kasus saya:

rename 's/^.......//g' *

1

Dua sen saya:

for file in *; do mv $file ${file:5}; done

${file:n}menghapus nkarakter pertama dalam string file.


jawaban yang paling elegan.
— Sandwich
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.