代码之家  ›  专栏  ›  技术社区  ›  Teekin

unixshell脚本:更新所有子目录和子文件的时间戳,包括带有空格的子目录和子文件

  •  2
  • Teekin  · 技术社区  · 14 年前

    我尝试的第一件事:

    touch $(find .)

    因为空间太大不能用。它将更新所有没有空间的文件和目录的时间戳,但是没有空间的文件和目录不会收到新的时间戳。此外,正如人们所料,它在根目录中创建与带有空格的文件名元素相对应的文件。因此,如果我有一个名为“一二三”的文件,“touch”会在根目录中创建3个文件,“一”、“二”和“三”。这本身可以通过使用带有“touch”的-c来解决,但当然它仍然不会用spacey名称更新文件。

    我试过的第二件事是:

    for FILENAME in $(find .); do touch -t 201007162310.00 "$FILENAME"; done

    所以现在我迷路了。有什么想法吗?

    是不是真的不可能让“find”命令在每一行前面加上引号之类的东西?

    4 回复  |  直到 14 年前
        1
  •  12
  •   Roman Cheplyaka    11 年前
    find . -exec touch -t 201007162310.00 {} +
    

    这是做你想做的事情的最简单和最有力的方法。

        2
  •  5
  •   Beano    14 年前

    find xargs

    find . -print0 | xargs -0 touch
    

    这并不能完全满足您的需要,因为会有许多调用 touch 导致不同的时间。因此,可以使用另一个文件作为引用时间戳

    touch /tmp/ref
    find. -print0 | xargs -0 touch -r /tmp/ref
    
        3
  •  1
  •   Sjoerd    14 年前

    有几个选择:

    • read ,就像这样 find . | while read x; do touch $x; done
    • xargs ,就像这样 find . -print0 | xargs -0 touch
        4
  •  0
  •   Chance    14 年前

    如果你这样做了

    ls -b
    

    更新:

    find . | ls -b | xargs touch
    

    它似乎适用于我的小测试用例。