bashの文字を削除して複数のファイルの名前を変更するにはどうすればよいですか?


10

各ファイル名の最初の5文字を​​削除して、ディレクトリ内の複数のファイルの名前を変更する必要があります。
どうすればこれをbash / shellで実行できますか?Ubuntu 11.10を使用しています。ありがとう。

回答:


11

少しのループがある単純なforループでsedうまくいきます:

% 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

代替正規表現では、sed任意の5つの文字(一致すると言う.文字列(開始時の手段の任意の文字を)^)と、それを削除します。


9

Bashにはすばらしいスクリプトの可能性がいくつかあります。これが1つの方法です。

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

それ何をするかをテストする便利な方法は、コマンドの前にエコーを追加することです:

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

6つの疑問符は、5文字を超えるファイル名に対してのみこれを試行することを保証します。


5

sedを使用してこれを行うことができます

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

5

すべての素晴らしい答え、ありがとう。これは私の場合にうまくいきました:

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

1

私の2セント ':

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

${file:n}n文字列の最初の文字を削除しますfile


最もエレガントな答え。
サンドイッチ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.