2016-07-22 9 views
-1

ファイルがあるサブディレクトリを持つソースディレクトリがあります。私はまた別の構造を持つサブディレクトリを持つ宛先ディレクトリを持っています。ネストされたファイル構造に見つからないファイル名を見つける

fileNames = <get all file names from source directory> 
for fileName in fileNames { 
    if <not found in destination directory> { 
     print fileName 
    } 
} 

上記の疑似コードはどのようにすればよいですか?

EDIT:

Example file structure: 
./sourcedir/file1.txt 
./sourcedir/foldera/file2.txt 
./sourcedir/foldera/missingfile.txt 

./destdir/file2.txt 
./destdir/folderb/file1.txt 

のでmissingfile.txtが印刷されなければなりません。しかし、どこかでdestdirの下にあるので、file1.txtやfile2.txtはありません。

EDIT2: 私はこれが目指したものだったPython実装を行うことができました。私は彼らを試しているときにbashの回答にいくつかの問題を抱えていました。それは、bashで簡単に行うことができますか?

import os 
import fnmatch 

sourceDir = "./sourcedir" 
destinationDir = "./destdir" 

def find_files(directory, pattern): 
    for root, dirs, files in os.walk(directory): 
     for basename in files: 
      if fnmatch.fnmatch(basename, pattern): 
       filename = os.path.join(root, basename) 
       yield filename 

print sourceDir 
for sourcefilename in find_files(sourceDir, '*'): 
    #if not sourcefilename.lower().endswith(('.jpg', '.jpeg', '.gif', '.png','.txt','.mov','3gp','mp4','bmp')): 
    # continue 
    shouldPrint = True 
    for destfilename in find_files(destinationDir, '*'): 
     sourceBaseName = os.path.basename(sourcefilename) 
     destBaseName = os.path.basename(destfilename) 
     if sourceBaseName == destBaseName: 
      shouldPrint = False 
      break 
    if shouldPrint: 
     print 'Missing file:', sourcefilename 
+0

[タグ:bash]と[タグ:python]とタグ付けしました。ランダムにタグを割り当てているのですか、またはこれらの言語のいずれかに具体的にソリューションが必要ですか(なぜですか?) – tripleee

+0

良い点。私はすぐにそれらの2つのタグを使用する意味があるだろうが、私はより簡単に答えを理解することができた。多分、物事を混ぜるのを避けるために、ある言語に固執するほうが良いかもしれません。 – user317706

答えて

1

これは、diff -r source_dir target_dir | grep Only.*source_dir | awk '{print $4}'を実行すると簡単に実行できます。

  • diff -r source_dir target_dirのsource_dirとtarget_dirは
  • grep Only.*source_dirとの違いは、ターゲットディレクトリに
  • awk '{print $4}'をソースディレクトリ内の既存のすべてではないファイルは、ファイル名を除外します
0

を除外します示していハックのビットですが、finddiffで何かできますが、Pythonは必要ありません:

diff -u <(cd sourcedir && find . -type f) <(cd destdir && find . -type f) |\ 
grep "^\-\./" | sed 's/^-//' 

これはdestdirにおけるものとsourcedir内のファイルのリストを比較して、sourcedirではなくdestdirに存在するファイルのみを出力します。

関連する問題