【发布时间】:2014-08-08 16:27:31
【问题描述】:
我正在编写一个 bash 脚本,该脚本需要(递归地)将源文件夹中的所有文件和文件夹移动到目标文件夹中。
在尝试使其尽可能健壮并解决潜在的argument list too long - errors 问题时,我选择使用find 命令(以安全地确定要移动的文件)通过管道传输到xargs(以有效地将移动组合在一起)。我还使用-print0 和-0 来解决空间的潜在问题。
我编写了以下测试脚本:
#!/bin/bash
# create test source file structure, and destination folder
mkdir -p sourceDir/{subdir1,subdir\ with\ space\ 2}
mkdir -p destDir
touch sourceDir/subdir1/{a1.txt,noExtension1,file1\ with\ space.txt}
touch sourceDir/subdir\ with\ space\ 2/{a2.txt,noExtension2,file2\ with\ space.txt}
#move files/folders from source to destination
find sourceDir -mindepth 1 -print0 | xargs -0 mv --target-directory=destDir
这似乎可行(即文件被移动)但是由于某种原因我收到了许多错误,如下所示:
mv: cannot stat `sourceDir/subdir with space 2/file2 with space.txt': No such file or directory
mv: cannot stat `sourceDir/subdir with space 2/noExtension2': No such file or directory
mv: cannot stat `sourceDir/subdir with space 2/a2.txt': No such file or directory
mv: cannot stat `sourceDir/subdir1/file1 with space.txt': No such file or directory
mv: cannot stat `sourceDir/subdir1/noExtension1': No such file or directory
mv: cannot stat `sourceDir/subdir1/a1.txt': No such file or directory
是否应该没有办法做到这一点(对于我的脚本中指示的源文件)而不产生错误?
为什么会产生这些错误(因为文件和文件夹实际上正在被移动)?
【问题讨论】:
-
用
find sourceDir -mindepth 1 -exec mv "{}" --target-directory=destDir \;替换你的find命令 -
与上述脚本一起使用时仍然会出错。