将列出的目录中的所有文件向上移动一级

将列出的目录中的所有文件向上移动一级

我有一棵目录树,我需要删除其中一些目录并将所有文件从这些目录向上移动一级。

我知道如何一步步去做,但是有数千个,所以我需要优化流程。

我查找目录find . -type d -name 'src',然后需要将找到的目录中的所有文件向上移动一级 ( ../)。

root
- one
-- two
--- src
- three
-- four
--- five
---- src

第一个内容src应移至two,第二个内容应src移至five

我怎样才能用一个脚本做到这一点?

答案1

就像是:

find . -type d -name src -exec sh -c 'cd "$1"; for f in *; do mv -i "$f" .. ; done' find-sh {} \;

请注意-i标记为mv。如果它要求您确认是否覆盖某些内容,您应该说“不”,除非您期望这样做。

既然您说您之后也想删除这些src目录,请使用:

find . -type d -name src -exec sh -c 'cd "$1"; for f in *; do mv -i "$f" .. ; done' find-sh {} \; -exec rmdir {} \;

先做好备份。

答案2

src假设每个级别 都没有嵌套子目录,并且src是最新的目录级别,那么下面应该完成这项工作。

find . -path '*/src/*' -type f -execdir echo mv -t ../ {} +

答案3

我知道的最安全的方法是:

  1. cd“你的目录在哪里”
  2. 现在使用tar将它们保存在某处:tar -cvf“要保存到的文件名,例如 /tmp/mysavfil.tar”“所有目录的名称,例如:foo bar 等”,这样您就得到:tar -cvf /tmp/mysavfil.tar foo bar
  3. 然后做:cd ..
  4. 然后:tar xvf /tmp/mysavfil.tar
  5. 或者,如果您希望删除不再需要的文件,如下所示:cd“文件所在的原始位置”;rm -rf foo bar;rm /tmp/mysavefiltar
  6. 你完成了

一个更简单的方法是:

  • mv foo bar ../.

相关内容