将文件从一个文件夹结构移动到另一个文件夹



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

/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

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

我会使用以下命令:

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将使用作为分隔符将文件从find传递到xargs。这将确保您的脚本能够使用wierd文件名。

如果脚本似乎对您有利,请删除echoecho的使用是为了在没有副作用的情况下测试命令。

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

如果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

这些只是示例(警告:未测试,仅键入…(

cd /home/user/Desktop/
find . -type f -print | while read f; do mv "$f" "/home/user/Documents/$f"; done

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

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

请看一下这个讨论,在文件名中处理spaces确实很有帮助。

相关内容

  • 没有找到相关文章

最新更新