Jak zmienić nazwę wielu plików, usuwając znaki w bash?


10

Muszę zmienić nazwę wielu plików w katalogu, usuwając pierwsze 5 znaków dla każdej nazwy pliku.
Jak mogę to zrobić I bash / shell? Używam Ubuntu 11.10. Dzięki.

Odpowiedzi:


11

Prosta pętla for z odrobiną sedzałatwi sprawę:

% 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

Substytut regex w sedmówi dopasować jakieś pięć znaków ( .oznacza dowolny znak) na początku łańcucha ( ^) i usuń go.


9

Bash ma niesamowite możliwości tworzenia skryptów. Oto jeden ze sposobów:

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

Przydatnym sposobem sprawdzenia, co by to zrobił, jest dodanie echa przed poleceniem:

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

Sześć znaków zapytania gwarantuje, że spróbujesz to zrobić tylko w przypadku nazw plików dłuższych niż 5 znaków.



5

Wszystkie świetne odpowiedzi, dzięki. Oto, co zadziałało w moim przypadku:

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

1

Moje dwa centy':

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

${file:n}usuwa pierwsze nznaki z ciągu file.


najbardziej elegancka odpowiedź.
Kanapka
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.