【问题标题】:Move files from one folder structure to another [closed]将文件从一个文件夹结构移动到另一个[关闭]
【发布时间】:2014-04-22 04:19:45
【问题描述】:

假设我有一个这样的目录结构:

/home/user/Desktop/test/testdir1/
/home/user/Desktop/test/testdir2/
/home/user/Desktop/test/testdir3/

和这里的结构相同:

/home/user/Documents/test/testdir1/
/home/user/Documents/test/testdir2/
/home/user/Documents/test/testdir3/

如何移动文件,例如

/home/user/Desktop/test/testdir3/hello.txt

到相应的目录? (仅移动文件)

【问题讨论】:

    标签: bash file ubuntu terminal directory


    【解决方案1】:

    我会使用这个命令:

    cd /home/user/Desktop/
    find . -type d -print0 | xargs -0 -I'{}' echo mkdir -p '/home/user/Documents/{}'
    find . -type f -print0 | xargs -0 -I'{}' echo mv '{}' '/home/user/Documents/{}'
    

    引用{} 将确保您的脚本适用于包含空格的文件。

    此外,-print0-0 将使用 \0 作为分隔符将您的文件从 find 传递到 xargs。这将确保您的脚本适用于奇怪的文件名。

    如果脚本看起来适合您,请删除 echo。使用echo是为了测试命令没有副作用。

    【讨论】:

    • 效果很好。你能帮我做一件事吗?我需要它将新目录从 /home/user/Desktop/ 复制 到 /home/user/Documents/ (并移动内容)。谢谢。
    • 先执行这个:find . -type d -print0 | xargs -0 -I'{}' echo mkdir -p '/home/user/Documents/{}'
    • 啊,我刚刚注意到这将使用我的文件名创建文件夹。 (例如文件夹名称“test.txt”)
    • -type d 部分非常重要,它告诉find 只输出文件夹名,而不是文件名
    【解决方案2】:

    有许多可能的解决方案...有些比其他更好,具体取决于细节。

    如果testdir目录结构是扁平的,

    for orig in /home/user/Desktop/test/*
    do
        targ=${orig/Desktop/Documents}
        mv -i $orig $targ
    done
    

    如果嵌套,并且目标目录不一定存在(如果文件名称中有空格,则会出现问题),并且假设您不希望移动嵌套目录:

    for orig in $(find /home/user/Desktop/test/ -type f -print)
    do
        targ=${orig/Desktop/Documents}
        targ_dir=$(dirname "$targ")
        [ ! -d "${targ_dir}" ] && mkdir -p "${targ_dir}"
        mv -i "$orig" "$targ"
    done
    

    这些只是示例(警告:未经测试,仅输入...)

    【讨论】:

      【解决方案3】:
      cd /home/user/Desktop/
      find . -type f -print | while read f; do mv "$f" "/home/user/Documents/$f"; done
      

      为了处理文件名中的spaces,您应该:

      • 不要忘记源和目标之间的"
      • 使用绝对路径。

      请看一下这个discussion,在文件名中处理spaces 真的很有帮助。

      【讨论】:

      • @John1024,你是对的。已经更新了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-22
      • 1970-01-01
      • 2012-07-13
      • 2013-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多