GNU/Linux >> Linux の 問題 >  >> Linux

特定のタイプのファイルのみのディレクトリをどのように比較しますか?

find を -exec とともに使用して、diff を呼び出すこともできます:

cd /destination/dir/1
find . -name *.xml -exec diff {} /destination/dir/2/{} \;

補完的な --include ... の欠如。

1 つの回避策として、含めたいファイル以外のすべてのファイルを含む除外ファイルを実行できます。 file1 を作成します 含めたい拡張子を持たないすべてのファイルを検索します sed ファイル名をキャッチし、ちょうど :

diff --exclude-from=file1  PATH1/ PATH2/

例:

find  PATH1/ -type f | grep --text -vP "php$|html$" | sed 's/.*\///' | sort -u > file1 
diff PATH1/ PATH2/ -rq -X file1 

man ページ (のバージョン) から取得:

-x PAT  --exclude=PAT
  Exclude files that match PAT.

-X FILE    --exclude-from=FILE
  Exclude files that match any pattern in FILE.

つまり、-x のようになります。 報告するときは 1 つのパターンしか受け入れませんが、除外したいすべてのパターンをファイル (おそらく 1 行に 1 つ) に入れる場合は、次のように 2 番目のフラグを使用できます:

$ diff /destination/dir/1 /destination/dir/2 -r -X exclude.pats

ここで、exclude.pats は次のとおりです:

*.jpg
*.JPG
*.xml
*.XML
*.png
*.gif

-x を指定できます

diff -x '*.foo' -x '*.bar' -x '*.baz' /destination/dir/1 /destination/dir/2

info diff のディレクトリの比較セクションから (私のシステムでは、 info -f /usr/share/info/diff.info.gz を実行する必要があります ):

<ブロック引用>

ディレクトリの比較中に一部のファイルを無視するには、「-xPATTERN」または「--exclude=PATTERN」オプションを使用します。このオプションは、ベース名がシェル パターン PATTERN と一致するファイルまたはサブディレクトリを無視します。シェルとは異なり、ファイル名のベースの先頭にあるピリオドは、パターンの先頭にあるワイルドカードと一致します。シェルが展開しないように、PATTERN を引用符で囲む必要があります。たとえば、オプション -x '*.[ao]' 名前が「.a」または「.o」で終わるファイルは無視されます。

このオプションは、複数回指定すると累積されます。たとえば、オプション -x 'RCS' -x '*,v' を使用すると、 ベース名が「RCS」または「,v」で終わるファイルまたはサブディレクトリは無視されます。


Linux
  1. Linuxで特定のディレクトリまたは別のディレクトリにtarファイルを抽出する方法

  2. 特定のディレクトリにSSHで接続する方法は?

  3. シェルの再帰ディレクトリにある特定の種類のファイルを一覧表示する方法は?

  1. Inotifywaitを使用して、特定の拡張子のファイルを作成するためのディレクトリを監視する方法は?

  2. CentOS / RHEL :特定のグループのみに SFTP を Chroot Jail に設定する方法

  3. 「mv」コマンドを使用して、特定のディレクトリ以外のファイルを移動する方法は?

  1. CentOS / RHEL :vsftp の chroot jail を特定のユーザーのみに設定する方法

  2. Linuxで2つのファイルの違い(追加のみ)を取得する方法

  3. ファイルがbashスクリプトの特定のディレクトリに存在するかどうかを確認するには?