【问题标题】:Linux find all files in sub directories and move themLinux查找子目录中的所有文件并移动它们
【发布时间】:2016-09-23 07:34:19
【问题描述】:

我有一个 Linux 系统,其中一些用户使用 ftp 将文件放在目录中。在这个目录中有用户可以创建的子目录。现在我需要一个脚本来搜索这些子目录中的所有文件并将它们移动到单个目录中(用于备份)。问题:不应删除子目录。

用户的目录是 /files/media/documents/ 并且文件必须在目录/files/dump/中移动。我不关心 /files/media/documents/ 中的文件,它们已经被另一个脚本处理了。

我已经尝试过这个脚本:

for dir in /files/media/documents/
do
    find "$dir/" -iname '*' -print0 | xargs -0 mv -t /files/dump/
done

【问题讨论】:

    标签: linux recursion move


    【解决方案1】:

    您可以只使用 find 来代替迭代。在手册页中记录了一个“-type”选项,因此对于移动 only files 你可以这样做:

    find "/files/media/documents/" -type f -print0 | xargs -0 mv -t /files/dump/
    

    您也不想在 /files/media/documents/ 中查找文件,而是在所有子目录中查找文件?只需添加“-mindepth”:

    find "/files/media/documents/" -type f -mindepth 1 -print0 | xargs -0 mv -t /files/dump/
    

    或者,您也可以使用“-exec”跳过第二个命令 (xargs):

    find "/files/media/documents/" -type f -mindepth 1 -exec mv {} /files/dump/ \;
    

    【讨论】:

    • 我还找到了另一种方法:for dir in /files/media/documents/* do mv $dir/* /files/dump/ done 这似乎也有效
    • 这也是正确的,但它不适用于您的子目录中的目录,并且还会移动这些子子目录。如果这无关紧要,那么你的 for 循环也会这样做;-)
    • 我不关心子子目录,因为即使它们存在,也必须移动它们:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 2013-01-26
    • 2014-04-14
    相关资源
    最近更新 更多