有一个目录dir/
。它包含子目录a
- z
.我需要将子目录移动a
到y
subdirectory 中z
。如果这很难,那么不是a
- z
,而是提供需要移动的目录列表。
我怎样才能在 bash 中做到这一点?
答案1
使用大括号扩展:http://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html
对于您的情况,请执行以下操作:
mv {a..y} z/
如果您有目录列表,例如dir1
、dir2
和dir3
,则执行以下操作:
mv -t z/ dir1 dir2 dir3
或者可能:
mv -t z/ dir{1..3}
简要说明:
-t
选项的意思是“目标”。它通常用于避免涉及多个文件/目录移动的情况下的混乱。- 大括号扩展的工作方式是
{1..15}
打印从 1 到 15 的所有数字,并{a..f}
打印从a
到 的所有字母f
。
答案2
至于我更安全的使用方式find
find dir/* -prune -type d -name "[a-y]" ! -name "z" -exec mv -t dir/z {} +
答案3
注意:这不是最干净的方法(请参阅 shivams 的答案),并且如果您仅有的a-z
里面有目录dir
。
我一直用的是比较容易记住的
mv * z
当然,它抱怨说
mv: cannot move ‘z’ to a subdirectory of itself, ‘z/z’
但否则做你想做的事。
这(至少)适用于GNU coreutils