/tmp/test$ ls
dir1 dir2 dirM
/tmp/test$ mv * dirM/
mv: cannot move `dirM' to a subdirectory of itself, `dirM/dirM'
有没有办法使用shell脚本将所有内容(除了dirm)移动到dirm?
最佳答案
你不说你在用什么炮弹。在符合posix的sh
中,可以循环浏览目录的内容,跳过dirM
:
for d in ./*/; do
[ ! -d "$d" ] || [ "$d" -eq "./dirM/" ] && continue
mv "$d" dirM
done
在
bash
中,您可以使用扩展模式来匹配除dirM
之外的所有模式:shopt -s extglob nullglob
for d in !(dirM)/; do
mv "$d" dirM
done
无论哪种情况,如果您只是想隐藏错误,请使用
mv * dirM 2> /dev/null
不建议这样做,因为它将丢弃可能发生的任何错误。