![](/img/trans.png)
[英]How to display full path of file using ls in linux with -R option in conjunction with grep
[英]List file using ls command in Linux with full path
許多人會發現這是重復的問題,但在被問及這個話題之前,我已經解決了所有問題,但沒有一個對我有用。
我想使用 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
這將打印出根目錄和子目錄中的所有文件。
Output:
0020111118223425.lvf
2012
2012 (2009).mp4
3 Idiots
Aashiqui 2
Agneepath.mkv
Avatar (2009)
Captain Phillips (2013)
Cocktail
我想要 output 像:
/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”中找不到文件,它會打印機器根目錄文件。
您可以使用
ls -lrt -d -1 "$PWD"/{*,.*}
它還將捕獲隱藏文件。
你可以試試這個:
ls -d $PWD/*
用於以完整路徑列出所有內容,僅在當前目錄中
find $PWD -maxdepth 1
與上面相同,但只匹配特定的擴展名,不區分大小寫(在這種情況下為 .sh 文件)
find $PWD -maxdepth 1 -iregex '.+\.sh'
$PWD 用於當前目錄,可以替換為任何目錄
mydir="/etc/sudoers.d/" ; find $mydir -maxdepth 1
maxdepth
防止 find 進入子目錄,例如,您也可以將其設置為“2”以列出子目錄中的項目。 如果您需要遞歸,只需將其刪除。
要將其限制為僅文件,可以使用-type f
選項。
find $PWD -maxdepth 1 -type f
您可以輕松使用以下內容僅列出文件:
ls -d -1 $PWD/*.*
以下列出目錄:
ls -d -1 $PWD/**
以下列出所有內容(文件/目錄):
ls -d -1 $PWD/**/*
更多有用的選項:
-d 列出目錄而不是它們的內容
-R 遞歸
-1 每行列出一個文件
-l 使用長列表格式
-a 列出所有包括以 開頭的條目。 和 ..
- 列出所有但不列出隱含的。 和 ..
欲了解更多信息,只需輸入以下內容
ls --help
這將從當前目錄遞歸打印所有文件。
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
使用以下命令打印完整路徑(也稱為解析路徑):
realpath README.md
在交互模式下,您可以使用 shell 擴展列出目錄中的所有文件及其完整路徑:
realpath *
如果您正在編寫 bash 腳本,我想您將擁有一個用於各個文件名的變量。
感謝 VIPIN KUMAR 指出相關的readlink
命令。
嘗試這個 -
readlink -f file.txt
ls
命令只會打印目錄中文件的名稱。 為什么不做類似的事情
print("/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/" + i)
這將打印出帶有文件名的目錄。
有不止一種方法可以做到這一點,我認為最簡單的方法是:
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`/{})
我遇到了這個問題,我使用以下內容:
ls -dl $PWD/* | grep $PWD
它總是讓我得到我想要的清單,但你的里程可能會有所不同。
這對我有用:
ls -rt -d -1 $PWD/{*,.*}
你只想要完整的路徑,為什么不使用這個實用程序,readlink 和 grep 的組合應該能讓你得到你想要的
grep -R '--include=*.'{mkv,mp4} ? | cut -d ' ' -f3 | xargs readlink -e #
the question mark should be replaced with the right pattern - this is almost right
# this is probably the best solution remove the grep part if you dont need a filter
find <dirname> | grep .mkv | xargs readlink -e | xargs ls --color=auto # only matroska files in the dir and subdirs with nice color - also you can edit ls flags
find /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7 | grep .mkv
find /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7 | xargs grep -R '--include=*.'{mkv,mp4} . | cut -d ' ' -f3 # I am sure you can do more with grep
readlink -f `ls` # in the directory or
怎么樣:
du -a [-b] [--max-depth=N]
這應該會給你一個文件和目錄列表,相對於你的當前位置。 您還將獲得大小(如果您想要以字節為單位的大小,請添加“-b”參數)。 max-depth 參數可能是必要的,以“鼓勵” du 深入了解您的文件結構——或者防止它被帶走。
天啊!
-101-
如果要遞歸列出子目錄樹中的絕對路徑名,請使用 du 和 pipe 進行剪切。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.