2011-06-19 12 views
1

私は、フォルダー内のファイルを比較し、別のフォルダー内のファイルと突き合わせて、一致するものがあるかどうかを検出できるbashスクリプト(unix)を作成しようとしています。Bashスクリプト - 正規表現。 regmatch.unix

フォルダ内のファイルがすべてのような一般的な名前の構造を有する:私は正規表現として[[a-zA-Z]+\DB[A-Z]+\-[a-zA-Z0-9-_]+\.[sql]試してみました

*****-dbtableName-*****-YYYY-MM-DD.sql 

を。動いていない。

私はどんな助けでも素晴らしいでしょう。

+0

ファイルに実際に名前に「*」文字が含まれていますか?がんばろう。 – shellter

+0

正規表現に基づいた@shellterは、 '*'はそのファイル名の例の中の何かを意味しているようです(つまり、ファイル名は正規表現そのものです!:P) – c00kiemon5ter

答えて

3

diffを試しましたか?

diff -q directory1 directory2は、両方のディレクトリに存在しないファイル、またはそれらが同一であるかどうかを報告します。特定のファイルタイプをdiffから除外するには、さらにフィルタリングしたい場合はgrepで結果をパイプするか、-xオプションを使用します。お使いのマシンのバージョンの詳細については、info diffを試してください。

1

は次のように名前を仮定:BARBAR-fooDB-bazbaz-2011-06-19.sql試合はそのように分析することができます。

[a-zA-Z]\+-[a-zA-Z]\+DB-[a-zA-Z]\+-[0-9]\+-[0-9]\+-[0-9]\+\.sql 

は、例えばを使用します。 grep

$ echo "barbar-fooDB-bazbaz-2011-06-19.sql" | grep "[a-zA-Z]\+-[a-zA-Z]\+DB-[a-zA-Z]\+-[0-9]\+-[0-9]\+-[0-9]\+\.sql" 
barbar-fooDB-bazbaz-2011-06-19.sql # matched 

あなたに厳しいことが、まだ

$ echo "barbar-fooDB-bazbaz-2011-06-19.sql" | grep "[a-zA-Z-]\+DB-[a-zA-Z0-9-]\+\.sql" 
barbar-fooDB-bazbaz-2011-06-19.sql # matched 

か、この例を好む場合

正しいファイル名と一致していないでしょう。この

[a-zA-Z-]\+DB-[a-zA-Z0-9-]\+\.sql 

のようにそれを最適化することができます

$ touch /tmp/barbar-fooDB-bazbaz-2011-06-19.sql 
$ ls -1 /tmp/ | grep "[a-zA-Z-]\+DB-[a-zA-Z0-9-]\+\.sql" 

これはすべて正規表現を扱うのに適していますが、問題の場合はダンの助言を受けてのワイルドカード(*.sqlなど)と組み合わせて使用​​してください。