循环的bash脚本

时间:2014-01-08 15:36:06

标签: linux bash

我正在尝试基本上查看每个用户都有子目录的目录。说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等等?

2 个答案:

答案 0 :(得分:1)

您可以提供find的多个路径:

find directory/* -type f ...

此处directory/*会扩展为directory/user1 directory/user2,实际上会为find提供多条路径。

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

答案 1 :(得分:0)

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

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 ...,这更简洁但不太清楚你的意图。