我找不到这个简单问题的快速解决方案:我有这棵树:
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
daughterDir
,nephew.file
您可以通过简单地指定来做到这一点egrep -v '(sonDir|daughterDir|nephew.file)'
,上面显示的命令的其余部分保持不变...并且有很多变化!
答案3
这有关系吗?移动仍然会发生。您收到的更多是警告。您可以将 stderr 重定向到 /dev/null。此外,如果它仍然困扰您,请使用 slhck 解释的 find 或类似的东西:
mv `ls * | grep -v sonDir` sonDir