Ls
我可以在包含文件和目錄列表的文本文件上執行“ls”嗎?
我有一個包含文件和目錄列表的文本文件,我只想過濾文件。我試過這個,但沒有奏效:
cat file.txt | ls -l | grep ^-
。這是文件:/etc /etc/firefox-esr /etc/firefox-esr/firefox-esr.js /usr /usr/bin /usr/bin/firefox package diverts others to: /usr/bin/firefox.real /usr/lib /usr/lib/firefox-esr /usr/lib/firefox-esr/Throbber-small.gif /usr/lib/firefox-esr/application.ini /usr/lib/firefox-esr/browser /usr/lib/firefox-esr/browser/blocklist.xml /usr/lib/firefox-esr/browser/chrome.manifest /usr/lib/firefox-esr/browser/crashreporter-override.ini /usr/lib/firefox-esr/browser/features /usr/lib/firefox-esr/browser/features/formautofill@mozilla.org.xpi /usr/lib/firefox-esr/browser/features/fxmonitor@mozilla.org.xpi /usr/lib/firefox-esr/browser/features/screenshots@mozilla.org.xpi /usr/lib/firefox-esr/browser/features/webcompat-reporter@mozilla.org.xpi /usr/lib/firefox-esr/browser/features/webcompat@mozilla.org.xpi
等等
cat file.txt | ls -l
會將文件的內容生成到 的標準輸入,ls
它只是不會從那裡讀取任何內容。通常 stdin 連接到終端,ls
當它執行時你永遠不會真正輸入任何內容。它確實從命令行讀取,因此您可以將文件的內容放在那裡,並使用命令替換:ls -ld $(cat file.txt) | grep ^-
-d
那裡ls
沒有列出目錄的內容。但是,這裡有一個關於分詞的常見警告,帶有空格的行將被分成多個部分,
ls
例如會查找名為package
、diverts
和的文件others
。此外,文件名中的萬用字元將被擴展。為了防止這種情況,我們需要禁用萬用字元set -f
並設置IFS
為僅在換行符上拆分。假設重擊:(set -f; IFS=$'\n'; ls -ld $(cat file.txt) | grep ^- )
另一種方法是遍歷 shell 中的文件內容並測試這些行是否代表目錄名稱。