我有目录结构:
~/MYDIR/
/DESTINATIONDIR/
/DIR1/
/DIR2/
/file1
/file2
我需要移动DIR1, DIR2,file1,file2
到DESTINATIONDIR
从终端执行此操作的最优雅,最佳方式是什么?
UPD:假设我们还有更多名称不同的文件和目录
我会考虑采用三种方式。
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中的扩展globbing功能,我们可以选择[几乎]除了目标目录之外的所有内容。
shopt -s extglob
mv ~/MYDIR/!(DESTINATIONDIR) ~/MYDIR/DESTINATIONDIR
如果您需要匹配隐藏文件,请shopt -s dotglob
事先运行,它将起作用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句