Filenames

如何在一行中獲取文件名及其絕對路徑?

  • May 6, 2022

我想逐行列出文件夾中的所有文件及其各自的絕對路徑,如下所示,

filename1  /home/.../file1  
filename2 /home/.../file2  
filename3 /home/.../file3  

我試過了find $(pwd) -type f,但它只給出了路徑。

使用 GNU find

find "$PWD" -type f -printf '%f %h/%f\n'
  • %f刪除了所有前導目錄的文件名(僅最後一個元素)。
  • %h文件名的前導目錄(除了最後一個元素)。如果文件名不包含斜杠(因為它在目前目錄中),則 %h 說明符擴展為 `.’。

帶標準find

find "$PWD" -type f -exec sh -c '
   for pathname do
       printf "%s\t%s\n" "${pathname##*/}" "$pathname"
   done' sh {} +

這將列印目前目錄中或下方所有文件的製表符分隔列表。第一列將包含文件的文件名,第二列將包含文件相對於目前目錄絕對路徑($PWD搜尋路徑中的 )的路徑名。

這是通過將批量找到的路徑名提供給一個簡短的內聯腳本來完成的,該腳本只是以首選格式輸出名稱。參數替換${pathname##*/}擴展為 的值,$pathname直到最後一個/被刪除。

請注意,包含換行符的文件名將顯示在多行中,並且很難正確區分包含製表符的文件名。假設結果是用於查看而不是解析,那可能沒問題。

引用自:https://unix.stackexchange.com/questions/512220