
我可以在 Windows CMD 腳本中執行此操作,但現在我透過 Raspberry Pi 進入 Debian。
我想做的是...
(在目前資料夾中)
- 對於每個子資料夾...
- 建立一個名為original_filenames.txt的文件
- 將資料夾名稱回顯到original_filenames.txt中
- 將所有檔案(包括任何子資料夾)列出到original_filenames.txt
答案1
使用 shell 循環:
for dir in */; do
{ printf '%s\n' "$dir"
( cd "$dir" && find . )
} >"$dir/original_filenames.txt"
done
這會迭代目前目錄中的所有子目錄。循環體輸出目錄的名稱,然後遞歸地輸出該目錄中所有檔案和目錄的清單。此輸出將轉到original_filenames.txt
目錄中的檔案。
較短:
for dir in */; do
find "$dir" >"$dir/original_filenames.txt"
done
這會產生略有不同的輸出,因為寫入檔案的路徑名均以子資料夾的名稱開頭。
如果您對目錄名稱不感興趣而只想常規檔案的路徑名,請在目錄名稱後面使用find
with 。-type f
請注意,如果您打算使用產生任何內容的輸出文件,那麼如果任何找到的路徑名包含換行符(這在 Unix 系統上完全有可能),那麼這將失敗(或至少是非常有問題的)。
答案2
您可以使用find
命令和exec
選項來執行此操作 - 如下所示:
find . -type d \( ! -name . \) -exec bash -c '
dirname=$(basename "{}") &&
cd "{}" &&
echo "{}" > original_filenames.txt &&
ls | grep -Fv original_filenames.txt >> original_filenames.txt
' \;
這是您可能會覺得有用的 StackOverflow 貼文: