我在这条路上:
/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
。