将所有文件/目录/隐藏文件移动到目录但忽略目标目录?

时间:2015-01-22 05:04:45

标签: bash ubuntu

如果我的结构如下:

parent/
  sub1/
  sub2/
  sub3/
  backup/
  file1.txt
  file2.txt
  .htaccess

我希望将所有内容转换为备份/,包括所有目录/隐藏/文件等。如果我mv * backup/当然会收到错误,因为我无法将备份移到自身。

如何忽略所有内容但忽略进程中的目标目录?

2 个答案:

答案 0 :(得分:1)

当你这样做时,

mv抱怨,但它仍然应该按你的要求做。不是吗?

mv *也不会移动任何点文件。

您需要mv * .* backup/才能获得有关不移动...的额外警告。

我可以看到使用shell本身执行此操作的唯一方法是使用extglobnullglob并执行以下操作。

$ shopt -s nullglob extglob
$ mv !(backup) .[!.]* ..?* backup/

答案 1 :(得分:1)

你正在做的事情实际上已经正常工作:你确实收到了关于将某些东西移到自身上的错误,但是这个错误是无害的,并且不能阻止其余的工作。

如果你真的不喜欢这样,你可以这样做:

find . -maxdepth 1 ! -name backup -execdir mv {} backup +