2014-12-07 81 views
23

許多人會發現,這是重複的問題,但我已經經歷了所有問題,然後問及這個主題,但沒有爲我工作。使用ls命令在Linux中使用完整路徑列出文件

我想打印使用ls命令的特定文件格式的完整路徑名到目前爲止,我發現了大量的代碼將打印目錄中的所有文件,但不是完整的路徑。

for i in io.popen("ls /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7"):lines() do 
    if string.find(i,"%.*$") then 
    print(i) 
    end 
end 

這將打印出根目錄下的所有文件和子目錄。

輸出:

0020111118223425.lvf 
    2012 
    2012 (2009).mp4 
    3 Idiots 
    Aashiqui 2 
    Agneepath.mkv 
    Avatar (2009) 
    Captain Phillips (2013) 
    Cocktail 

我想輸出,如:

/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/0020111118223425.lvf   [File in Root Directory] 
    /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/2012/2012.mkv 
    /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/2012 (2009).mp4    [File in Root Directory] 
    /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/3 Idiots/3 Idiots.mkv 
    /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/Aashiqui 2/Aashiqui 2.mkv 
    /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/Avatar (2009)/Avatar (2009).mkv 
    /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/Captain Phillips (2013).mkv 
    /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/Cocktail/Cocktail.mkv 

編輯: 我用這一切,但它不是我的LUA代碼工作。

當我和我的代碼中使用它會顯示錯誤的目錄

for i in io.popen("ls -d $PWD/* /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7"):lines() do 
    if string.find(i,"%.*$") then 
     print("/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/"..i) 
    end 
    end 

未找到文件「/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7」 insted的打印它的機器的根目錄下的文件。

+0

的可能的複製[ls命令:?我怎樣才能得到一個遞歸全路徑列表,每個文件一行(http://stackoverflow.com/questions/ 1767384/ls -a-command-how-can-i-get-a-recursive-full-path-listing-one-line-per-file) – 2016-08-26 03:13:25

回答

24

您可以使用

ls -lrt -d -1 $PWD/{*,.*} 

它也會捕獲隱藏的文件。

+0

這將如何與我的代碼一起工作。爲我在io.popen(「ls /mnt/mediashare/net/192.168.1。220_STORAGE_1d1b7 「):行()做 如果string.find(我,」 %* $ 「),那麼 打印(I) 結束 結束 – 2014-12-07 07:02:06

+1

@在io.popen(user1640175'因爲我的」 ls -lrt -d。 -1 /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7 /{*,.*}「)' – Totoro 2014-12-07 07:20:22

+0

得到它的工作感謝 – 2014-12-07 07:26:37

0

ls命令將只打印目錄中文件的名稱。爲什麼不這樣做

print("/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/" + i)

這將打印出的文件名的目錄。

+0

這不適用於子目錄。還有我想要在盧阿實施,所以我認爲你告訴我要做像打印(「/ mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7 /」..我) – 2014-12-07 06:50:09

+0

你的代碼是使用字符串文字。我只複製並粘貼它。對你的lua腳本進行更改可以讓你在任何目錄下調用這個腳本並獲得你想要的結果,這將是微不足道的。 – 2014-12-07 07:36:12

0

有不止一種方法來做到這一點,最簡單的,我認爲應該是:

find /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7 

也可以這樣:

(cd /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7; ls | xargs -i echo `pwd`/{}) 
17

你可以試試這個:

ls -d $PWD/* 
+4

ls -d「$ PWD」/ *用來解釋帶空格的路徑 – 2015-03-25 03:34:57

+1

對於空目錄,這會拋出'No such file or directory'。預計在空目錄上執行'ls'時什麼也看不到,但沒有例外。 – schreon 2015-10-06 09:29:10

2

這將打印的所有文件,遞歸,從當前目錄。

find "$PWD" | awk /.ogg/ # filter .ogg files by regex 
find "$PWD" | grep .ogg # filter .ogg files by term 
find "$PWD" | ack .ogg # filter .ogg files by regex/term using https://github.com/petdance/ack2 
10

僅適用於在當前目錄

find $PWD -maxdepth 1 

同上,但僅匹配特定的擴展,不區分大小寫(完整路徑上市的一切。SH在這種情況下的文件)

find $PWD -maxdepth 1 -iregex '.+\.sh' 

$ PWD是當前目錄下,它可以與任何目錄

mydir="/etc/sudoers.d/" ; find $mydir -maxdepth 1 

maxdepth防止進入子目錄中找到代替,比如你可以將其設置爲「 2「用於在兒童中列出項目。如果您需要遞歸,只需將其刪除即可。

要限制它僅限於文件,可以使用-type f選項。

find $PWD -maxdepth 1 -type f 
+1

在嘗試了各種解決方案之後,這是我能找到的唯一一個可以工作的遞歸方法1)在2)引用符號鏈接和3)打印整個路徑(我需要''| grep')。謝謝! – 2017-05-15 21:04:11

4

您可以輕鬆地使用以下僅列出文件:

ls -d -1 $PWD/*.* 

以下列出目錄:

ls -d -1 $PWD/** 

下面列出的一切(文件/顯示目錄):

ls -d -1 $PWD/**/* 

Mor Ë有用的選項:

-d列出目錄不是他們的內容

-R遞歸

-1列表每行

一個文件-l使用長格式

- 一個列表全部包含以下條目。和..

-A列出所有但不列出暗示。和..

更多的信息,只需鍵入以下

ls --help 
0

我有過這樣的問題,我用的是以下幾點:

LS -dl $ PWD/* | grep $ PWD

它總是讓我上市我想要的,但你的里程可能會有所不同。

0

這爲我工作:

ls -rt -d -1 $PWD/{*,.*} 
+2

你能詳細說明你的代碼中使用的標誌嗎? – Jublo 2017-07-03 23:31:07

+0

感謝Frits的更新 – 2017-07-04 19:10:59

+0

'$ man ls'可能是有用的 – 2017-07-23 14:10:52

相關問題