linux - 遍历目录和子目录以列出文件的脚本

标签 linux bash subdirectory

#!/bin/bash
#script to loop through directories to merge files

mydir=/data/
files="/data/*"

for f in $files
do
    if[ -d "$f" ]
    then
            for ff in $f/*
            do
                    echo "Processing $ff"
            done
    else
            echo "Processing $f"
    fi
done

我有上面的代码来遍历目录和子目录并列出所有文件。我收到错误:意外标记“then”附近出现语法错误

我在这里做错了什么?

最佳答案

if [ -d "$f" ]
  ^

if[之间需要有一个空格。如果您没有空格,bash 认为您正在尝试执行名为 if[.

的命令
files="/data/*"
for f in $files

也知道这是行不通的。要在这样的变量中存储通配符扩展,您需要使用数组。语法有点毛茸茸...

files=(/data/*)
for f in "${files[@]}"

或者您可以按照处理内部循环的方式内联编写通配符。那会很好。

for f in "$mydir"/*

就其值(value)而言,您可以使用 find 递归地遍历所有文件和子目录。

find /data/ -type f -print0 | while read -d $'\0' file; do
    echo "Processing $file"
done

-type f 只匹配文件。 -print0-d $'\0' 相结合是一种特别小心包含空格、制表符甚至换行符等字符的文件名的方法。在文件名中包含这些字符是合法的,因此我喜欢以能够处理它们的方式编写我的脚本。

请注意,这将递归到比子目录更深的层次。它会一直下降。如果这不是您想要的,请添加 -maxdepth 2

关于linux - 遍历目录和子目录以列出文件的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18360000/

相关文章:

c++ - 如何分析内存使用情况?

bash - 可以在此代码中使用 eval 完成代码注入(inject)吗?

python - 你如何计算文件夹中的子目录?

c - 使用 libusb 输出不正确

linux - 使用 sendmail 时如何更改发件人姓名(不是电子邮件地址,而是显示的名称)

linux - 我有一些代码有一个在终端上运行良好但从脚本运行时失败的命令

powershell - 搜索目录结构和报告文件夹是否存在?

windows - 在 Windows 中批量重命名子目录

linux - 在 .bash_profile 中从哪里获取 .profile 以在 Cygwin 中安装 RVM?

bash - 如何将变量从 shell 脚本传递到 expect 脚本?