實際上,我有一個資料夾,其中包含幾個子資料夾,每個子資料夾中都有很多圖像。
我試圖將每個子資料夾中檔案的所有名稱收集到該子資料夾中的文字檔案(filesNames.txt)中,格式如下:
絕對/路徑/到/每個/文件/檔名
所以,我在父資料夾中編寫了一個腳本:
#!/bin/sh
for dir in "$PWD"/*/; do
arr=( "$dir"* )
cd "$dir"
printf "%s 1\n" "$PWD/${arr[@]##*/}" > "$dir"filesNames.txt
cd ..
done
我的問題就是它:
我有每個子資料夾中第一個檔案的絕對地址。其餘的只有檔名,沒有絕對地址:
/run/media/parent_folder/subfolder/filename1.png
filename2.png
filename3.png
...
我認為這與$PWD我只為每個子資料夾迭代一次變數。如何以合適的形式更改腳本?
提前致謝。
答案1
單一find
命令將輸出所有具有絕對路徑的文件
find $(pwd) -type f
答案2
如果您想使用純 shell 腳本來做到這一點並且不想使用 find,請嘗試這個小腳本:
#!/bin/bash
#Simple bash recursive loop search - Luciano A. Martini =)
nextdir(){
for f in *; do
if [ -d "$f" ] && [ ! -L "$f" ]; then
#echo "Inside folder: $PWD/$f"
nextdir "$f"
cd ..
continue
else
echo "$PWD/$f"
fi
done
}
#call the function for the first time...
nextdir
例如儲存為遞歸循環並在您想要搜尋的資料夾中執行。它將完全執行 find 或其他遞歸機制的操作,但使用 for 循環,並且您可以根據您的需求進行自訂!
$./recursive-loop
/home/luciano/readme.txt
/home/luciano/images/a.bmp
/home/luciano/texts/a.txt
/home/luciano/texts/b.txt
/home/luciano/texts/music/lyrics.txt
(...)