【问题标题】:Bash script which iterates over files of a path遍历路径文件的 Bash 脚本
【发布时间】:2021-05-31 11:17:41
【问题描述】:

我有这个文件夹架构

folder
   folder 1 (1)/
       /file1_1.txt
       /file2_2.txt
   folder 2 (2)/
       /file2_1.txt
...
   folder N (N)/
       /fileN_1.txt
       /fileN_2.txt

通过脚本,我想遍历第一级的所有文件夹(folder1、folder2、folder3)并对每个.txt文件进行操作。

我尝试了什么:

folder=$1
length=$(expr length "$folder")

for subfolder in $folder/*;
do
    subfoldername=${subfolder:$length+1}
    for h in $subfolder/*;
    do
    echo "h is: "$h
    done
done

回显 $h 显示:

h is: bdcntest/folder
h is: 1
h is: (1)/*
h is: bdcntest/folder
h is: 2
h is: (2)/*

循环“for h in $subfolder/*;”接缝将 $subfolder 解释为字符串而不是路径。 我认为也许文件夹名称中的空格可能是问题所在,但我还没有设法得到解决方案。

有什么想法吗?

【问题讨论】:

  • 使用类似的东西:for f in folder*/*.txt; do echo "$f"; done。请勿在此作业中使用 find。那是矫枉过正。必要时不要忘记引用变量。
  • 他想操作/进入文件夹的第一层 - 还是我错了?
  • 我准确地说“操作”是什么意思:我在这个不同的文件夹中还有很多其他类型的文件。我想复制第一级的所有文件夹(文件夹 1、文件夹 2、文件夹 3)以及每个 readme.txt 和此文件夹中存在的不同 .pdf 文件。每个文件夹中只有这个文件,而不是所有其他文件(如 avi 或 mp3)。我当然想保留这个目录结构。 readme.txt 和 .pdf 总是在第一个目录中,而不是在子目录中。此外,我认为使用 find 命令 (?) 可能很难完成所有这些操作。这就是我使用 bash 命令的原因。

标签: bash shell scripting


【解决方案1】:

您好,欢迎来到 Stack Overflow!

如果我正确理解了你的问题,你想要这样的东西吗?

find folder/ -name "*.txt" -maxdepth 1 -type f -exec cat {} \;

显然,可以将"cat" 更改为任何其他命令,此命令(或程序)将对"folder/" 目录中的*.txt 文件进行“操作”,最大深度为1。

folder显然也可以,换个文件夹。

【讨论】:

  • 那是多余的。只需cat folder/*.txt 即可完成
  • @M.NejatAydin 我不明白你的意思?他想去文件夹的第一级?还是我错了(我误解了什么吗?:o如果有任何问题,请告诉我;对不起 - 如果有!
猜你喜欢
  • 1970-01-01
  • 2020-01-16
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
相关资源
最近更新 更多