如何将除一个特定目录之外的文件和目录移动到此目录

时间:2014-12-26 09:15:19

标签: bash terminal grep

enter image description here

目录中的

~/domains/annejulie.blue-world.pl/git

我想获取除 annejulie.blue-world.pl.git 目录之外的所有文件和目录,并将它们移动到该目录中( annejulie.blue-world.pl.git

如何使用查找 grep 命令在终端中执行此操作?有可能吗?

3 个答案:

答案 0 :(得分:7)

首先在终端中执行以下命令。这扩展了正则表达式。

shopt -s extglob

现在您可以执行以下mv命令

mv !(<file/dir not to be moved>) <Path to dest>

例如,如果你在〜/ Test并且你需要将除〜/ Test / Dest之外的所有内容移动到〜/ Test / Dest,你可以按照下面给出的那样执行它,假设你在〜/ Test

mv !(Dest) ~/Test/Dest

答案 1 :(得分:2)

使用find,假设您find支持-mindepth-maxdepth

find . -mindepth 1 -maxdepth 1 \! -name annejulie.blue-world.pl.git -exec echo mv {} annejulie.blue-word.pl.git \;

这不执行移动,而是在终端上打印它将执行的操作。如果您对结果感到满意,请移除echo字后的-exec

如果您的mv支持-t选项,则可以使用此选项:

find . -mindepth 1 -maxdepth 1 \! -name annejulie.blue-world.pl.git -exec echo mv -t annejulie.blue-word.pl.git {} +

如果您的find不支持-mindepth-maxdepth,则此POSIX兼容应执行以下操作:

find \( \! -name '.' -type d -prune -o \! -type d \) \! -name annejulie.blue-world.pl.git -exec echo mv {} annejulie.blue-word.pl.git \;

它有效,但它真的很难看。


当然,最好的选择是使用

mv -- * annejulie.blue-world.pl.git

mv抱怨它无法移动到自身的子目录中。

答案 2 :(得分:0)

您可以使用find

cd ~/domains/annejulie.blue-world.pl/git
find . -and -not -path './annejulie.blue-world.pl.git*' -exec mv {} ./annejulie.blue-world.pl.git \;