2017-03-16 14 views
0

すでに接頭辞を持つファイルを無視して複数のディレクトリにあるすべてのファイルにアンダースコアを追加するスクリプトを作成する必要があります。たとえば、_file1, _file2, file3, file4のように見える必要があります_file1, _file2, _file3, _file4Unixの特定のファイル名にプレフィックスを付ける

私はUnixスクリプトの知識がほとんどないので、簡単な説明をいただければ幸いです!

答えて

0

そこに最高のバッシュリソースから:

  1. 関連するすべてのファイルと一致するglobを作成します。
  2. Loopすべての一致するファイル。
    1. Removeファイル名の下線は変数に結果を保存します。
    2. 変数にアンダースコアを先頭に付けます。
    3. echo変更後のファイル名に適切なquotesを使用して元のファイル名を付け、それが正当なものであることを確認します(引用符は構文のためechoで印刷されません)。
    4. echoの代わりにmvを使用して、実際にファイルの名前を変更します。また

  • あなたmv-n/​​をサポートしている場合、最大
1

はあなたがいずれかを使用することができ、あなたの混乱の場合には、データ損失の可能性を回避するためにそれを使用しますライナーはこのように:

find dir_with_files -regextype posix-extended -type f -regex '^.*\/[^_][^\/]*$' -exec rename -v 's/^(.*\/)([^_][^\/]*)$/$1_$2/' '{}' \; 

ここで、dir_with_filesはファイルを検索する上位ディレクトリです。 _から始まる名前のファイルを見つけ、それぞれの名前を変更します。

変更を行う前に、params -n -vでrenameを使用して、実際に実行することなく、実行する操作を表示できます。

find dir_with_files -regextype posix-extended -type f -regex '^.*\/[^_][^\/]*$' -exec rename -v -n 's/^(.*\/)([^_][^\/]*)$/$1_$2/' '{}' \; 
+0

@michaeljay私の解決策がうまくいく場合は、正しい解決策としてマークしてください。 – Kamil

関連する問題