mv 多个目录到同一目录

mv 多个目录到同一目录

如果第二个目录存在,我想将多个目录移动到目录中。

最初的:

dmv/toto/toto0
dmv/toto1/toto1
dmv/toto2/toto2

dmv/toto0/toto00
dmv/toto2/toto02

最终的:

dmv/toto/toto0
dmv/toto1/toto1
dmv/toto2/toto2

dmv2/toto0/toto00
dmv2/toto0/toto0
dmv2/toto2/toto02
dmv2/toto2/toto2

我尝试这样做,但我不检查目录是否存在:

~/dmv/$ for i in $(ls); do mv "${i}"/* ../dmv2/"${i}"; done

答案1

您的初始和最终目录列表阶段有些神秘,因此我不确定您到底要求什么。也许这会对你有一点帮助。脚本往往更具可读性;mvDir.sh例如调用它:

#!/usr/bin/bash
for file in ./*; do
    [ -d "${file}" ] && [ mkdir -p ../dmv2/"${file}" ] \
    && mv "${file}"/* ../dmv2/"${file}" 
done

确保:

  • 脚本路径包含在环境变量中的位置PATH。在 cli 上,执行: $ echo "$PATH") 来检查它。
  • 该脚本是可执行的。在 cli 上,执行以下操作: $ chmod u+x mvDir.sh

要运行它,只需转到包含脚本的目录和要解析其名称的目录,然后在 cli 上执行以下操作:$ ./mvDir.sh

如果你坚持要一句尴尬的长话,请在 cli 中执行:

$ for file in ./*; do [ -d "${file}" ] && [ mkdir -p ../dmv2/"${file}" ] && mv "${file}"/* ../dmv2/"${file}"; done

还有其他更高级的方法可以做到这一点,例如涉及find.

相关内容