回顯目錄中每個檔案的名稱和行數

回顯目錄中每個檔案的名稱和行數

我應該編寫一個 shell 腳本,向其中發送一個代表目錄的命令列參數。然後我應該回顯該目錄中每個檔案的所有檔案名稱和行數。我還應該只對時間不超過 10 分鐘的前 10 個文件執行此操作。

find "$1" -cmin -10 -type f | head -10 

這是我嘗試尋找更新時間超過 10 分鐘的文件的方法,但出現了一些錯誤。而且我也不知道該如何獲得這些名字。預先感謝您的所有幫助。

我的文件名是免費的。我得到的錯誤是,當將我的主目錄作為參數傳遞時,權限被拒絕。所以我沒有拿到名單。我應該獲取文件名列表和每個文件的行數。

當我/bin/bash ss1 /home/ivana在終端機中輸入時,出現以下錯誤:

find: '/home/ivana/.cache/dconf': Permission denied

我正在使用Linux。

答案1

好的,首先要做的事。您得到的錯誤無關緊要,它只是意味著/home/ivana/.cache/dconf您的特定子目錄 ( )$HOME不屬於您。這幾乎肯定會發生,因為您使用sudo.簡單的修復方法是:

sudo chown -R ivana /home/ivana/

這會將您後面的所有檔案和目錄的所有權變更$HOME為您自己的使用者名稱。如果您可以擁有其他使用者正確擁有的內容,則只需更改目錄的所有權即可dconf

sudo chown -R ivana /home/ivana/.cache/dconf

現在,也就是說,正確執行此操作並處理任意檔名的方法是:

find "$1" -cmin -10 -type f -print0 | head -z -n 10 

這將導致find列印使用尾隨\0而不是換行符號找到的每個文件,這確保它可以處理名稱包含換行符的文件。選項-z使其head讀取\0分隔輸入。

下一步是讀取每個文件並列印它們的行數:

find "$1" -cmin -10 -type f -print0 | head -z -n 10 |
    while IFS= read -r -d '' file; do wc -l "$file"; done

IFS=輸入欄位分隔符號設為空,使-r不進行特殊read處理\(因此\t不會成為製表符)並-d ''告訴read讀取\0分隔資料。

相關內容