2017-07-11 14 views
0

LaunchControlを使っていくつかのホットフォルダを作成しようとしています。スクリプトの一部で、特定のディレクトリにあるファイルの名前を変更したい場合は、私が持っている問題は、名前を変更する部分にありません、それはディレクトリを呼び出すスクリプトを取得しています。私がオンラインで見つけたすべてのスクリプトや記事は、名前を変更するスクリプトの一部としてディレクトリパスを正しく呼び出すのではなく、ファイルの名前を変更するのに役立ちます。それは難しいとは思われませんが、私はそれを解決することはできません。特定のディレクトリのファイルをbash/regexで名前を変更する

これまで私が試したことは何もありません。もし私がディレクトリにCDを置いて、ディレクトリを呼んでいる部分を除外すると、ファイルの名前が変更されます。その後、

#!/bin/bash 

target_directory=/Volumes/COMMON-LIC-PHOTO/ASPERA/ASPERA_STAGING 
cd "$target_directory" || { 
    echo "Error cd'ing to $target_directory" >&2 
    exit 1 
} 

...とあなたfindコマンドの-iregex一部をオフのままに:

find . -mindepth 3 -type f -iregex '.*/Volumes/COMMON-LIC-PHOTO/ASPERA/ASPERA_STAGING/.*' -print0 | 
xargs -0 rename -v 's/([0-9]*)_LK/$1_standard/' \; 
+1

「ディレクトリを呼び出す」という意味を理解できません。名前を変更して何を助けてくれるかの例。 – janos

+0

申し訳ありませんが、 "ディレクトリを呼び出す"とは、スクリプト自体がルートレベルで実行されているため、ファイルの名前を変更するためにどのフォルダを探しているかを知るためにディレクトリパスを指定する必要があります。 "LK"という言葉を "標準"と "ALT"を "alternate"に置き換える必要があります。例えば、123454_LK.tifは123454_standard.tif、123454_ALT1.tifは123454_alternate1.tifになります。 –

答えて

1

使用、スクリプトの先頭に次のようなもの。この上でいくつかの注意事項:

  • find .カレントディレクトリ下の検索、およびスクリプトでそれを設定していない場合、あなたはそれができるでしょうか分かりません。それをルートディレクトリ( "/")から実行すると、アクセス権を持っているすべてのディレクトリとファイルが検索されます(そうでないものに対してはエラーがスローされます)。そして、ターゲットに含まれていないものを破棄しますディレクトリ;ターゲットディレクトリを検索する方がはるかに優れています。 find "$target_dirctory"でこれを達成することもできます。

  • 上記のスニペットでは、ディレクトリがわかっていて固定であると仮定しているため、文字通りスクリプトにそのまま含めることができます。そうでない場合は、正しく設定するためにさらに複雑なものが必要になります。

  • 私はcdコマンドにエラーチェックを追加 - スクリプトでcdを使用するときは、常にはこれを行う必要があります。そうでなければ、何かがうまくいかないと、スクリプトの残りの部分が間違ったディレクトリで実行され、奇妙で破壊的な結果が生じる可能性があります。実際には、私はスクリプト内でcdを使用することを避け、明示的なパスを使用するほうが好まれます。これは一般的に安全で簡単です。

+0

(@DavidCへのクレジット私のエラーのリダイレクトでエラーを指摘するための.Rankin :-) –

+0

ありがとうございます。私はそれが仕事に非常に近いと思う。問題は、 "$ target_directory"へのエラーcd'ingを返しています。ファイルの名前を変更することはできませんが、実際にエラーの後にAspera_Stagingディレクトリに移動します。 Aspera_Staging内のサブディレクトリも検索できますか?通常はサブディレクトリにもファイルがあるので、-mindepthはそれを処理すると思われますが、そうでないかもしれません。 –

+0

@JamesTrory私が理解しているかどうかわかりません - それは 'cd'に失敗した場合にのみエラーを出し、' exit'は何もしないようにするべきです。また、 'find'は通常、すべてのサブディレクトリ、サブサブディレクトリ、サブサブサブディレクトリなどを検索します。 '-mindepth 3'は3レベル以下のファイルをリストしないようにします。 –

1

findのバージョンが-execdir機能を持っている場合、あなたは、この(私は今テストすることはできません)のような何かを行うことができます:終わり近く

find . -mindepth 3 -type f -iregex '.*/Volumes/COMMON-LIC-PHOTO/ASPERA/ASPERA_STAGING/.*' -execdir rename -v 's/([0-9]*)_LK/$1_standard/' {} \; 

お知らせ{}を、それが一致したことを意味パス。 -execdirフラグは、一致したファイルのディレクトリでコマンドを実行しました。

関連する問題