我有一个目录,里面有很多文件和目录。为了整理一下,我将把所有这些文件放到一个目录中,所以我打算做这样的事情:
$ ls | wc -l
123
$ mkdir new_directory
$ mv * ./new_directory
Run Code Online (Sandbox Code Playgroud)
但是,这显然行不通,因为它会尝试new_directory
进入new_directory
. 是否有一些简单的方法可以在一行中完成我想要的操作,而不必复制和粘贴该目录中的所有文件和目录?
小智 11
一个快速而肮脏的单线。
mv `ls -A | grep -v new_directory` ./new_directory
Run Code Online (Sandbox Code Playgroud)
如果您只是在寻找文件(即不是目录),那么
find . -type f -maxdepth 1 -exec mv {} ./new_directory/ \;
Run Code Online (Sandbox Code Playgroud)
是最便携的解决方案。为了速度,您应该使用 -print0 和 -0 移动 find 和 xargs,但前提是您有 GNU find 和 xargs。
我遇到这个问题的时候,我做了以下事情之一:
$ mkdir ../new-directory
$ mv * ../new-directory/
$ mv ../new-directory .
Run Code Online (Sandbox Code Playgroud)
或者
$ mkdir .new-directory
$ mv * .new-directory/
$ mv .new-directory new-directory
Run Code Online (Sandbox Code Playgroud)
第二种形式利用通配符跳过以 '.' 开头的文件名。