我在路径上:
/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以避免出现意外)。
loc*_*obr 19
我发现了类似的东西,但更容易理解,它也可能对你有用:
ls | grep -v new | xargs mv -t new
Run Code Online (Sandbox Code Playgroud)
对上述解决方案添加说明:
从手册页:
mv -t
-t, --target-directory=DIRECTORY
move all SOURCE arguments into DIRECTORY
Run Code Online (Sandbox Code Playgroud)grep -v
-v, --invert-match
Invert the sense of matching, to select non-matching lines.
Run Code Online (Sandbox Code Playgroud)分步解释:
ls 将列出当前目录中的文件grep -v new 将通过管道返回与新的不匹配的xargs mv -t new将通过管道传输到它的文件从grep -v目标目录移动简单的想法。假设您在/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)
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)