将目录中的所有文件移动到子目录中

将目录中的所有文件移动到子目录中

我找不到这个简单问题的快速解决方案:我有这棵树:

fatherDir
   -File1.txt
   -SomeFile.txt
    ...
   - A name.txt
   -sonDir

我想将 fatherDir 中的所有文件移至 fatherDir/SonDir 内。

mv * sonDir

由于 sonDir 位于 fatherDir 内部,因此我收到错误。

如何实现这个目标?

答案1

查找所有文件,fatherDir而不是使用*(这sonDir也给你)

find fatherDir -type f -maxdepth 1 -exec mv {} fatherDir/sonDir \+

{}被找到的每个文件名替换,并且所有文件名都将移动到目标目录。

答案2

一种方法是将 grep 与 xargs 结合使用:

ls -A | egrep -v sonDir | xargs -i mv {} sonDir
  • 首先列出当前目录(即 fatherDir)中的所有文件和文件夹ls
  • -A确保使用该标志读取隐藏文件
  • egrep -v让你排除打印输出的 sonDir
  • 使用标准输入创建命令行,xargs并替换{}为相关文件名。-i此处需要选项!

就是这样!我经常使用这种方法,因为它不仅允许您排除一个文件夹,还允许您同时排除不同的文件夹和文件。如果您想要排除例如sonDir daughterDirnephew.file您可以通过简单地指定来做到这一点egrep -v '(sonDir|daughterDir|nephew.file)',上面显示的命令的其余部分保持不变...并且有很多变化!

答案3

这有关系吗?移动仍然会发生。您收到的更多是警告。您可以将 stderr 重定向到 /dev/null。此外,如果它仍然困扰您,请使用 slhck 解释的 find 或类似的东西:

mv `ls * | grep -v sonDir` sonDir

相关内容