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

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

我在这条路上:

/myuser/downloads/

我创建了一个子文件夹:

/myuser/downloads/new

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

我怎样才能做到这一点?

我试过:

mv -R *.* new/

但 move 似乎不采用 -R 开关。

答案1

命令

mv !(new) new

应该可以解决问题。如果不行,请先运行shopt -s extglob

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

shopt -s extglob dotglob
mv !(new) new
shopt -u dotglob

(最好取消设置dotglob以避免出现意外shopt -u dotglob

答案2

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

ls | grep -v new | xargs mv -t new

对上述解决方案添加解释:

来自手册页:

  • mv -t

    -t, --target-directory=DIRECTORY
          move all SOURCE arguments into DIRECTORY
    
  • grep -v

    -v, --invert-match
          Invert the sense of matching, to select non-matching lines.
    

分步解释:

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

答案3

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

你可以直接使用mv * subdir1。你会看到一条与尝试移动subdir1到自身相关的警告消息,如下所示:

mv: cannot move 'subdir1' to a subdirectory of itself, 'subdir1/subdir1'

但它会将所有其他文件和目录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

答案4

如果要将某个文件夹中的所有文件移动到其某个子文件夹,可以使用以下命令:

find /myuser/downloads/ -type d -name 'new' -prune -type f | xargs mv -t /myuser/downloads/new

它将找到所有文件,然后将它们移动到您的子文件夹中。

@waltinator:添加-type d -name 'new' -prune以防止遍历/myuser/downloads/new

相关内容