Bash'daki karakterleri kaldırarak birden fazla dosyayı nasıl yeniden adlandırabilirim?


10

Her dosya adı için ilk 5 karakteri kaldırarak dizindeki birden çok dosyayı yeniden adlandırmak zorunda.
Bunu nasıl bash / shell yapabilirim? Ubuntu 11.10 kullanıyorum. Teşekkürler.

Yanıtlar:


11

Biraz döngü ile basit bir sedhile yapacak:

% 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

Yedek regex içinde sedherhangi beş karakter (maç için diyor .dize (başlangıcındaki aracı herhangi bir karakter) ^) ve çıkarın.


9

Bash'in şaşırtıcı komut dosyası oluşturma olanakları vardır. İşte bir yol:

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

Ne test etmek kolay bir yolu olurdu yapmak komuta önünde bir yankı eklemektir:

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

Altı soru işareti, bunu yalnızca 5 karakterden uzun dosya adlarıyla yapmaya çalışmanızı sağlar.


5

Bunu yapmak için sed kullanabilirsiniz

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

5

Tüm harika cevaplar, teşekkürler. Benim durumumda işe yarayan buydu:

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

1

Benim görüşüm':

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

${file:n}ndizedeki ilk karakterleri kaldırır file.


en zarif cevap.
Sandviç
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.