Как переместить файлы и каталоги, исключая один конкретный каталог, в этот каталог

bash terminal grep

3166 просмотра

3 ответа

37434 Репутация автора

введите описание изображения здесь

внутри каталога

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

я хочу получить все файлы и каталоги, кроме каталога annejulie.blue-world.pl.git, и переместить их в этот каталог ( annejulie.blue-world.pl.git )

Как это сделать в терминале с помощью команды find и grep ? Является ли это возможным?

Автор: Bartłomiej Semańczyk Источник Размещён: 26.12.2014 09:15

Ответы (3)


0 плюса

564846 Репутация автора

Вы можете использовать find:

cd ~/domains/annejulie.blue-world.pl/git
find . -and -not -path './annejulie.blue-world.pl.git*' -exec mv {} ./annejulie.blue-world.pl.git \;
Автор: anubhava Размещён: 26.12.2014 09:23

7 плюса

1667 Репутация автора

Решение

Сначала выполните следующую команду в терминале. Это расширяет регулярные выражения.

shopt -s extglob

Теперь вы можете выполнить следующую команду mv

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

Например, если вы находитесь в ~ / Test и вам нужно переместить все, кроме ~ / Test / Dest в ~ / Test / Dest, вы можете выполнить его, как указано ниже, при условии, что вы находитесь в ~ / Test

mv !(Dest) ~/Test/Dest
Автор: Seema Kadavan Размещён: 26.12.2014 09:36

2 плюса

33338 Репутация автора

При 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жаловаться, что он не может перейти в подкаталог сам по себе.

Автор: gniourf_gniourf Размещён: 26.12.2014 10:24
Вопросы из категории :
32x32