将所有文件和目录移动到目标目录

将所有文件和目录移动到目标目录

我有目录结构:

~/MYDIR/
  /DESTINATIONDIR/
  /DIR1/
  /DIR2/
  /file1
  /file2

我需要DIR1, DIR2,file1,file2搬到DESTINATIONDIR

从终端执行此操作的最优雅和最佳方法是什么?

UPD:假设我们有更多不同名称的文件和目录

答案1

我认为有三种方法可以实现此目的。

充满黑客和错误的“移动所有的东西”

mv ~/MYDIR/* ~/MYDIR/DESTINATIONDIR

这会尝试将目的地移入其自身并爆炸:

mv: cannot move ‘~/MYDIR/DESTINATIONDIR’ to a subdirectory of itself, ‘~/MYDIR/DESTINATIONDIR/DESTINATIONDIR’

但它会移动 [几乎] 所有其他东西。所以它能工作,但有点乱。如果您需要匹配隐藏文件,请shopt -s dotglob事先运行,它就会工作。

手动移动文件列表

给出简短的列表,我们可以很容易地用一点 bash 扩展列出它们:

 mv ~/MYDIR/{DIR{1,2},file{1,2}} ~/MYDIR/DESTINATIONDIR

如果您需要使用此方法隐藏文件,只需将它们包含在列表中即可。

如果此列表来自其他内容(例如find),则很难确保目的地是最后一个参数。 您可以使用参数将目的地移到前面-t。 这是一个糟糕的例子,但在您需要时会突出显示:

find ~/MYDIR/ -maxdepth 1 ! -name DESTINATIONDIR -exec mv -t ~/MYDIR/DESTINATIONDIR {} +

用 进行逆向匹配shopt,优雅定义。

因此,让我们在手动列出和通配符之间取得平衡。通过打开 Bash 中的扩展通配符功能,我们可以选择 [几乎] 所有内容目标目录。

shopt -s extglob
mv ~/MYDIR/!(DESTINATIONDIR) ~/MYDIR/DESTINATIONDIR

如果需要匹配隐藏文件,请先运行shopt -s dotglob即可。

答案2

关于什么:

cd ~/MYDIR
mv DIR* file* DESTINATIONDIR

相关内容