如何将当前文件夹中的所有文件移动到子文件夹?

Bla*_*man 96 files

我在路径上:

/myuser/downloads/
Run Code Online (Sandbox Code Playgroud)

我创建了一个子文件夹:

/myuser/downloads/new
Run Code Online (Sandbox Code Playgroud)

现在我想将下载文件夹中的所有文件和文件夹/子文件夹移动到子文件夹。

我怎样才能做到这一点?

我试过:

mv -R *.* new/
Run Code Online (Sandbox Code Playgroud)

但是 move 似乎没有使用 -R 开关。

enz*_*tib 138

命令

mv !(new) new
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩。如果它不起作用,shopt -s extglob请先运行。

要同时移动隐藏文件/目录(以点开头),shopt -s dotglob请先运行。
所以,总结一下:

shopt -s extglob dotglob
mv !(new) new
shopt -u dotglob
Run Code Online (Sandbox Code Playgroud)

(最好取消设置dotglob以避免出现意外)。

  • 你能提一下``!(something)`` 的意义吗? (6认同)
  • @adeer 非常相似。`setopt extendedglob` 在 zsh 中设置扩展的 glob 模式。`^` 是排除符号,所以 `mv ^new new` 可以解决问题。然后要查看在 zsh 中设置的所有选项,您可以使用 `setopt` 并禁用扩展 glob 模式,您可以执行 `unsetopt extendedglob` (6认同)
  • 非常。你碰巧知道 zsh 的等价物吗? (5认同)
  • @adeer 只是说不(某事)。换句话说,复制所有内容但不复制某些内容。清如泥? (2认同)

loc*_*obr 19

我发现了类似的东西,但更容易理解,它也可能对你有用:

ls | grep -v new | xargs mv -t new
Run Code Online (Sandbox Code Playgroud)

对上述解决方案添加说明:

从手册页:

分步解释:

  • ls 将列出当前目录中的文件
  • grep -v new 将通过管道返回与新的不匹配的
  • xargs mv -t new将通过管道传输到它的文件从grep -v目标目录移动

  • 只是在 osx 上测试这个,我得到了同样的错误 `mv:非法选项 -- t`,这是因为 osx 的 mv 没有 `-t` 选项。 (2认同)

jpe*_*ezz 9

简单的想法。假设您在/myuser 中,将下载重命名为new,创建一个新的下载目录,然后将new移动到其中。

mv downloads new # downloads is now called new
mkdir downloads # create new directory downloads
mv new downloads # move new into it.
Run Code Online (Sandbox Code Playgroud)


Jos*_*ter 8

只需使用mv * subdir1并忽略警告。

你可以只使用mv * subdir1. 您将看到与尝试subdir1进入自身相关的警告消息,如下所示:

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

但它会将所有其他文件和目录移动到subdir1正确的位置。

一个例子:

$ ls
$ mkdir dir1 dir2 dir3      
$ touch file1.txt file2.txt file3.txt
$ mkdir subdir1
$ ls
#=> dir1  dir2  dir3  file1.txt  file2.txt  file3.txt  subdir1
$ mv * subdir1
#=> mv: cannot move 'subdir1' to a subdirectory of itself, 'subdir1/subdir1'
$ ls
#=> subdir1
$ ls subdir1
#=> dir1  dir2  dir3  file1.txt  file2.txt  file3.txt
Run Code Online (Sandbox Code Playgroud)