2014-10-03 97 views
-3

我有一個包含多個文件夾的文件夾,在這些文件夾中還有更多的文件夾等等。 這棵樹的某處有文件(文本文件)。其中一個文件包含「找我」。我需要找到該文件的路徑。在bash和python中(每種語言都有一個代碼)。在bash中獲取目錄

當然,我不希望你解決這對我來說挑戰,所以我有一些問題(所有的問題是關於兩種語言):

  1. 我怎麼去了所有的文件和在某個目錄中的目錄?
  2. 如果我得到一個文件/目錄路徑,我該如何判斷這個路徑是用於文件還是用於目錄?
  3. (僅適用於bash)如何讀取文件內容並檢查它是否包含「找我」?
+0

請在bash中瞭解grep命令。它可以解決您的問題,如果您不知道如何檢查文件或目錄,還需要了解bash的基本知識。 – RBH 2014-10-03 12:26:29

+0

1)「find --help」 2)是 3)「cat/path/to/file」 – soerium 2014-10-03 12:28:41

+0

Python:1&2)'os.walk' or'os.listdir' 3)''找到我「在開放(fname).read()' – matsjoyce 2014-10-03 12:31:45

回答

0

我覺得這個功能將解決您的Python問題1和2。 (我不知道bash。)它會單獨給你所有目錄和文件的完整列表,以及兩者結合的完整路徑。你可以試用它並根據你的喜好進行修改。然後,您需要閱讀所有找到的文件並尋找「找到我」。

import os 

def find_paths(path): 
    dir_names = [] 
    file_names = [] 
    path_names = [] 
    for dirname, dirnames, filenames in os.walk(path): 
     for filename in filenames: 
      # Combine dirname and filename into absolute path: 
      filepath = os.path.join(dirname, filename) 
      # Add info to lists: 
      dir_names.append(dirname) 
      file_names.append(filename) 
      path_names.append(filepath) 
    return dir_names, file_names, path_names 

print find_paths(".") # Finds all dirs, files and paths in current folder. 
+0

'dir_names'列表將包含** lot **的重複項...... – 2014-10-03 14:46:49

+0

這就是@ PM2Ring。就像這樣,因爲當我最初做這個功能時我只想要完整的路徑。要刪除重複,你可以看看這個問題:[「在Python中從列表中獲取唯一值」](http://stackoverflow.com/questions/12897374/get-unique-values-from-a-list-in-蟒蛇)。我不知道這是否是最優雅的解決方案,但是我可以發現它應該適用於所有操作系統。 – PaulMag 2014-10-04 22:20:33

+0

好的。我想這可能是方便有這3個同步列表。但是這似乎浪費了空間,因爲您可以在需要時使用'os.path.split()'構建'path_names'並提取(路徑,基本名稱)。 – 2014-10-05 01:56:46

2

隨意嘗試的grep:

grep -r "find me" . 

grep -r "find me" /path/to/your/folder