如果第二个目录存在,我想将多个目录移动到目录中。
最初的:
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
.