如何将所有兄弟文件夹移动到一个文件夹中?

jgr*_*tty 6 linux file-transfer bash-scripting

我很抱歉这似乎是一个愚蠢的问题,但我不能把它搞砸。

我有一堆这样的文件夹:

/users/me/foo/oops1

/users/me/foo/oops2

/users/me/foo/oops3

/users/me/foo/oops4

/用户/我/富人/酒吧

不幸的是,它们并没有统一命名,并且有数百个 oops 文件夹。

我打算将所有 oops 文件夹复制到 bar 中。有没有一种简单的方法可以将所有 oops 文件夹移动到 bar 中,而不会导致某种递归移动问题?

复制文件花了几个小时。我希望行动会快得多。

顺便说一下,这是在 redhat linux 服务器上。我只有 ssh 访问权限。

我想如果我这样做

cd foo
mv * bar
Run Code Online (Sandbox Code Playgroud)

会有问题。

小智 7

你的提议完全正确。mv足够聪明,会说:

mv: cannot move `bar' to a subdirectory of itself, `bar/bar'
Run Code Online (Sandbox Code Playgroud)

但是,您所有的 oopsx 目录都将在 bar 内。


slh*_*hck 3

不幸的是,马特的答案妮可的答案都表现出糟糕的风格,如果任何文件夹甚至包含单个空白字符、通配字符(如*)或换行符,就会中断。运行for item in $(ls \xe2\x80\xa6)是一个可能犯的巨大错误,因为它迟早会咬住它们,并且迭代文件名,不正确输出它们可能会导致各种麻烦。

\n\n

永远不要解析ls.

\n\n

Linux 中有一个工具可以查找符合特定条件的文件,它的名字是find

\n\n
find . -mindepth 1 -maxdepth 1 \\\n-type d ! -regex ".\\/bar$" \\\n-exec mv \'{}\' ./bar/ \\;\n
Run Code Online (Sandbox Code Playgroud)\n\n

这会将当前工作目录中未调用的任何目录移动bar./bar/. 即使目录名称包含空格、通配符或换行符,它也能工作。

\n\n

正则表达式.\\/bar$将仅匹配名为 的目录./bar,并且它被 否定!

\n