发现我对这一小段 shell 脚本的误解

发现我对这一小段 shell 脚本的误解

实际上,我有一个文件夹,其中包含几个子文件夹,每个子文件夹中都有很多图像。

我试图将每个子文件夹中文件的所有名称收集到该子文件夹中的文本文件(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
(...)

相关内容