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

「diff -X」でファイル名ではなく特定のパスを無視するにはどうすればよいですか?

ディレクトリの一覧表示は機能するはずです。たとえば、スクリプトで使用したものは次のとおりです (gnu diff を想定)。

diff -r \
   --exclude="*~" \
   --exclude=".svn" \
   --exclude=".git" \
   --exclude="*.zip*" \
   --exclude="*.gz" \
   --exclude="*.tar" \
   ...etc

... .svn の内容を無視します と .git ディレクトリだけでなく、*.zip という名前の個々のファイルも /*.gz /etc.

編集: dir_a/file1 の形式のパスをフィルタリングするには それでも diff dir_b/file1 など、同じベース名を持つファイル または dir_a/b/file1 、次に diff へのファイルのリスト を生成する必要があります (たとえば、 find を使用) )、およびこれらのパスから派生した比較対象のファイル。例えば、与えられた

$ find ONE TWO -type f -print 
ONE/a/1.txt
ONE/a/2.txt
ONE/a/b/2.txt
TWO/a/1.txt
TWO/a/2.txt
TWO/a/b/2.txt

たとえば */a/2.txt を除いて、比較するファイルのリストを生成します 2.txt という名前の他のファイルをまだ比較しています . ONE/a/2.txt 以外のすべてのファイルを「検索」するだけです (.*/a/2.txt などの正規表現もここで使用できます )

$ find ONE -type f \( ! -regex 'ONE/a/2.txt' \) \
    -exec bash -c 'diff -q "${1}" "${2/ONE/TWO}"' - {} {} \;  

実際には ONE/a/2.txt を無視します (そして TWO/a/2.txt )、ただし 2.txt という名前の他のファイルを比較します :

diff -q ONE/a/1.txt TWO/a/1.txt
diff -q ONE/a/b/2.txt TWO/a/b/2.txt

編集: または、find でもっと楽しく (読者の演習として残した追加の楽しみ)、除外するファイルまたはディレクトリを選択します そして diff 他のすべて:

$ find ONE \( -regex 'ONE/a/2.txt' -o -name b  -prune \)  \
    -o -type f -exec bash -c 'echo diff -q "${1}" "${2/ONE/TWO}"' - {} {} \

上記の例では、特定のファイル「{top}/a/2.txt」、「b」という名前のディレクトリが除外され、それ以外はすべて diff されます。 (単純な "-name b の代わりに " "-regex '.*/b' も使用できます " - 注、末尾に "/" はありません。)


同じ問題があったので、diff へのパッチを作成しました .パッチはまだ承認されていませんが、独自のバージョンの diff をビルドできます パッチを使用するか、AUR パッケージを使用して Arch Linux にインストールしてください。

これが diff です パッチ。


ディレクトリ directory/sub-directory を除外するには 、私は使用します

diff -r <src-dir> <dest-dir> | grep -v directory/sub-directory

ただし、単一の除外では機能するはずですが、長い無視リストでは使用できないはずです。


Linux
  1. Linuxのルートでもファイルとディレクトリを削除できないようにする方法

  2. Ibusを無視しないようにする方法〜/ .xcompose?

  3. ファイルの存在を確認し、存在しない場合はコマンドを実行するにはどうすればよいですか?

  1. ファイルをスパースにする方法は?

  2. Linux 端末から特定のファイルを見つけるにはどうすればよいですか?

  3. 1行で必要に応じてファイルとmkdirに触れる方法

  1. ls をファイル拡張子でソートしてから名前を付ける方法は?

  2. Ubuntu 10.04でsudoセッションを数分ではなく1時間にするにはどうすればよいですか?

  3. システムが ~/.screenrc ファイルを使用していることを確認するにはどうすればよいですか?