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.