【问题标题】:Bash - create subfolders for folders recently createdBash - 为最近创建的文件夹创建子文件夹
【发布时间】:2016-10-03 12:21:12
【问题描述】:

我想“加入”这两个任务:

for dir in /blabla/bleble/*; do (cd "$dir" && mkdir -p Folder1/Folder1a && mkdir -p Folder2); done

find -amin -10

我该怎么做? 这个我试过了,还是不行:

find -amin -2 -exec sh -c '
for dir in /blabla/bleble/*; do (cd "$dir" && mkdir -p Folder1/Folder1a && mkdir -p Folder2); 
done' sh {} +

【问题讨论】:

  • 两者有什么关系?是否要将 /blabla/bleble/* 匹配的项目限制为最近 10 分钟内访问的项目?
  • 循环,顺便说一下,更简单的写成for dir in /blabla/bleble/*/; do mkdir -p "$dir/Folder1/Folder1a" "$dir/Folder2"; done
  • @chepner 我只想为最近几分钟访问的文件夹创建子文件夹(实际上是创建的文件夹,-mmin)

标签: bash for-loop find directory


【解决方案1】:

这样的事情可能会做:

find /a/b/ -mindepth 1 -maxdepth 1 -type d -amin -2 \
  -exec sh -c 'for f; do mkdir -p -- "$f/Folder1/Folder1a" "$f/Folder2; done"' "" {} +

细分:

-mindepth 1 -maxdepth 1 将结果限制在当前目录。

-type d 确保您只列出目录

-exec foo "" {} + 将执行 foo 并将匹配项作为参数:

foo "" "/a/b/c" "/a/b/john" "a/b/doe"

for f 将遍历所有位置参数($1$2、...)

for f; do
  mkdir -p -- "$f/Folder1/Folder1a" "$f/Folder2"
done

运行sh -c 'code' arg1 arg2 会将$0 设置为arg1,并将$1 设置为arg2,因此空参数:foo "" {} +

% sh -c 'echo $0' john
john

【讨论】:

    【解决方案2】:

    假设/blabla/bleble 中没有太多文件夹导致您溢出命令行,您可以使用find 搜索目标目录。 -prune 防止递归到目录中。

    find /blabla/bleble/* -prune -type d -amin -10 -exec mkdir -p {}/Folder1/Folder1a {}/Folder2 \;
    

    如果您使用 GNU find 或其他支持它们的版本,请改用 -mindepth-maxdepth 来查找顶级子目录,无论有多少。

    find /blabla/bleble -maxdepth 1 -mindepth 1 -type d -amin -10 -exec mkdir -p {}/Folder1/Folder1a {}/Folder2 \;
    

    【讨论】:

      猜你喜欢
      • 2018-12-02
      • 1970-01-01
      • 2013-08-23
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      • 2020-07-18
      相关资源
      最近更新 更多