【问题标题】:bash script for loop用于循环的 bash 脚本
【发布时间】:2014-01-08 15:36:06
【问题描述】:

我试图基本上查看一个目录,其中包含每个用户的子目录。说 user1 和 user2 等等。我想基本上遍历每个目录并查找早于某个日期的文件并将其记录下来。我可以使用 ls -d /directory/*/ 获取目录列表。我知道我可以使用 find ./ -type f -mtime +30 来查找超过 30 天未修改的文件。我很难弄清楚如何使用 find 所以每次通过它都会看起来像 find ./user1 -type f -mtime30 然后 ./user2 等等。

#!/bin/bash
LIST="$(ls -d /Volumes/db_backups/*/)"
for i in "$LIST";do
        fold=`basename $i`
        echo $fold
        ModList=$(find $i -type f -mtime +30 >$fold.out )
        $ModList
done

更新:我能够获得文件列表。但是,我不想遍历特定的子目录并向每个用户发送电子邮件。例如,我记录了一个文件,例如 /dir1/dir2/user1/file.txt。我将如何获取 user1 列表并将其放入 user1.out 然后 user2.out 等等?

【问题讨论】:

  • 您是否尝试通过其中路径的子字符串拆分文件?
  • 我想我已经接近了。我将此添加到我的 for 循环中。 for i in "$LIST";do fold=basename $i 所以基本上我想为每个具有超过 x 天的文件列表的子目录创建输出文件。然后我想我基本上可以将每个输出文件通过电子邮件发送给每个用户。
  • 请将您的实际代码添加到问题中。

标签: linux bash


【解决方案1】:

您可以提供多个路径到find

find directory/* -type f ...

这里directory/* 将扩展为directory/user1 directory/user2,实际上提供了多个路径到find

编辑再想一想,您应该可以只使用find directory -type f(帽子提示@anubhava)。

【讨论】:

  • 这和find directory -type f有区别吗?
【解决方案2】:

如果你真的想为每个子目录运行一个单独的进程,那么这就是你想要的:

cd /Volumes/db_backups
for entry in *
do
  if [[ -d "${entry}" ]]                       # skip things that aren't directories
  then
    find "${entry}" -type f -mtime +30 -print > /some/log/directory/"${entry}".output
  fi
done

if ... fi 位可以缩短为 [[ -d "${entry}" ]] && find ...,这样更简洁,但对您的意图不太明确。

【讨论】:

    猜你喜欢
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 2013-05-18
    • 2013-09-17
    相关资源
    最近更新 更多