我有一個包含文件的子目錄的源目錄。我也有一個目錄目錄與其他結構的子目錄。在嵌套文件結構中查找缺失的文件名
fileNames = <get all file names from source directory>
for fileName in fileNames {
if <not found in destination directory> {
print fileName
}
}
我該如何做上面的僞代碼?
編輯:
Example file structure:
./sourcedir/file1.txt
./sourcedir/foldera/file2.txt
./sourcedir/foldera/missingfile.txt
./destdir/file2.txt
./destdir/folderb/file1.txt
所以missingfile.txt應打印。但不能file1.txt或file2.txt,因爲它們可以在destdir下找到。
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
您已將此標籤標記爲[tag:bash]和[tag:python]。你是隨機分配標籤,還是你需要解決方案專門用這兩種語言之一(爲什麼?)? – tripleee
好點。我馬上認爲這兩個標籤可以使用,所以我可以更容易地理解答案。也許最好是堅持一種語言,以避免混淆事物。 – user317706