2016-11-08 1 views
0

私は複数のファイルを持っています。 singletA.dat singletB.dat singletC.dat複数のフォルダにあります。各ファイルには、共通部分<シングレット>と拡張子.datと変数< A B C ...>があります。 私は、これらのファイルを含むすべてのフォルダを調べ、変数A B Cとは無関係にファイル名をsing.datに変換したいとします。 bashでは、これらの部分変数を検出できる関数が存在しますか?複数のフォルダの複数のファイルの部分的な名前を検出する関数をbashで書く方法は?

ありがとうございます! tommy

+1

を見つけは、ファイルの名前を含むfind変数です。しかし、あなたが 'singletA.dat'と' singletB.dat'を1つのフォルダに持っていれば、衝突する名前のために2つの 'sing.dat'ファイルを作成することはできません。 2つのファイル(またはこの名前付けパターンに続くすべてのファイル)を1つの 'sing.dat'に連結しますか?フォルダごとに1つの 'singletX.dat'ファイルしかありませんか? – Aserre

+0

こんにちはAserre!各ファイルは別のフォルダにありますので、矛盾する問題は解決されました... –

+0

[あなたがこれまでに試したこと](http://whathaveyoutried.com)を表示するようあなたの質問を編集してください。問題のあるコードの[mcve]を含める必要があります。次に、特定の問題を解決するために役立つことができます。 [ask]も読んでください。 –

答えて

0

findを使用できます。 findとワイルドカードの組み合わせを使用して

find mydir -name "singlet?.dat" -execdir mv {} sing.dat \; 
+0

大丈夫、ありがとう!私はしようとしたが、このようなコマンドを使用して動作しません:見つける。 -name "singlet?.dat" -execdir mv {} sing.dat \ ... –

0

、あなたがそのような何かができる:例えば

find /path/to/search -type f -name 'singlet?.dat' -execdir mv {} ./sing.dat \; 

命令内訳:

  • find /path/to/searchは、選択したフォルダ内の検索を実行します。すべてのサブフォルダを調べます
  • -type fはファイルを探しています。これはオプションで、主にセキュリティの役割を果たします。singletA.dat/という名前のフォルダがあります(私は他人の命名規則を判断しません...)
  • -name 'singlet?.dat'は、探しているファイルのパターンです。 ?は「任意の文字」を意味する​​3210です。あなたのファイルがsinglet.dat間の文字の不特定多数を持っている場合は、代わり-name 'singlet*.dat'パターンを使用することができます
  • -execdir mv {} ./sing.dat \;は、我々はすべてのファイルに対して、次の命令を実行することを意味し
      • を見つけましたexecとは対照的に、execdirは、ファイルが見つかったフォルダでコードが実行されることを意味します。
      • 01あなたはグロブまたは正規表現パターンを使用することができ
  • +0

    Aserre、ありがとう!それは本当に明確で、私はすぐにしようとする! –

    +0

    私はなぜそれが動作しないのかわからない...それは実行されますが、何も変更されません...ファイル名の種類はsinglet335.datのようなものです....夜は数字か位置ですか? –

    +0

    うん!私は2つの疑問符を追加し、それは完全に働いた!再度、感謝します! –

    関連する問題