我有一个目录
foo/
bar.txt
baz.yzw
wun/
a.out
现在,我想基本上在两者之间添加一个目录,即我想做它
foo/
var1/
bar.txt
baz.yzw
wun/
a.out
旨在向 中添加其他内容foo
,但与旧内容分开。
我当然可以这样做:
$ mkdir foo-new
$ mv foo foo-new
$ mv foo-new foo
或者
$ cd foo
$ mkdir var1
$ mv $(ls | grep -v var1) var1
但两者看起来都不优雅并且容易出错。
有更好的方法吗?
您可以简单地创建 var1 目录,将 foo 中的所有文件/文件夹移动到 var1,最后将 var1 移动到 foo
shell 和
mv
命令足够聪明,不会尝试将 var1 目录移动到自身中。我会重命名目录并将其移动到一个新目录中,就像您所做的那样。在其内容
var1/
之间插入:foo
这适用于目录内容。但是,如果我们还考虑目录的所有者、访问位、ACL、扩展属性、inode 号等,情况会更加复杂。
如果我们想保持
foo
原样,那么我们需要var1
重新创建并移动内容。使用重击:或者,为避免错误,请使用
extglob
:请注意,它
$(ls | grep -v)
不包括点文件,如果您的文件名带有空格或换行符(出于两个不同的原因),它将不起作用。如果目标目录尚不存在,您可以使用
rsync
它来创建目标目录(仅最后一级),但这将导致您稍后将其删除或保留的空目录。在我的rsync手册页中有一个选项
-m, --prune-empty-dirs.
,但我没有得到那个工作!prune empty directory chains from file-list
我放在
--remove-source-files
括号内是为了[警告]。删除空目录: