/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

不建议这样做,因为它将丢弃可能发生的任何错误。

10-08 11:40