я получил

нтересно - как я могу переместить все файлы в каталоге, кроме этих файлов в определенном каталоге (так как у 'mv' нет опции '--exclude')?

 Madhur Ahuja06 янв. 2011 г., 06:59

Ответы на вопрос(4)

mv the-folder-you-want-to-exclude somewhere-outside-of-the-main-tree
mv the-tree where-you-want-it
mv the-excluded-folder original-location

(По сути, переместите исключенную папку из большего дерева для перемещения.)

Итак, если у меня естьa/ и я хочу исключитьa/b/c/*:

mv a/b/c ../c
mv a final_destination
mkdir -p a/b
mv ../c a/b/c

Или что-то типа того. В противном случае вы могли бы получитьfind чтобы помочь вам.

 Thanatos26 сент. 2017 г., 01:00
Как я сказал (шесть лет назад), ответ не описывает точно, о чем просили, а толькомог бы сделать работу. В большинстве случаев это должно работать; конечно, ваше исключение.
 Kallaste26 сент. 2017 г., 06:27
Вы правы, это не так. Но я не хотел сказать, что это было не то, о чем просили, а то, что в некоторых случаях это не сработало. Мой пример был просто гипотетическим, чтобы продемонстрировать это.
 Kallaste25 сент. 2017 г., 20:00
А если файлы, которые вы перемещаете, находятся в вашем корне? Например, некоторые системы предоставляют пользователю доступ только к одному каталогу (хороший пример - облачные IDE). Может быть, кто-то хочет переместить все в дочерний каталог. Это не сработает.
Решение Вопроса

Давайте предположим, что структура dir похожа,

|parent
    |--child1
    |--child2
    |--grandChild1
    |--grandChild2
    |--grandChild3
    |--grandChild4
    |--grandChild5
    |--grandChild6

И нам нужно переместить файлы так, чтобы это выглядело как,

|parent
    |--child1
    |   |--grandChild1
    |   |--grandChild2
    |   |--grandChild3
    |   |--grandChild4
    |   |--grandChild5
    |   |--grandChild6
    |--child2

В этом случае вам необходимо исключить две директорииchild1 а такжеchild2и переместите остальные каталоги вchild1 каталог.

использовать,

mv !(child1|child2) child1

Это переместит все остальные каталоги вchild1 каталог.

 Pred04 дек. 2014 г., 02:14
Сумасшедший, только что понял, что комментарий выше необходим для Bash.
 Michael Trouw07 апр. 2015 г., 16:21
Как это можно заставить? когда нет других каталогов, кроме игнорируемых?mv -f не похоже на работу. Я решил временную проблему, создав временный каталог, таким образом, всего три папки, затем переместив все каталоги, затем удалив временный каталог. некрасиво!
 Pred04 дек. 2014 г., 02:10
Я продолжаю получать-bash: !: event not found при попытке сделать эту команду.
 Noumenon31 авг. 2016 г., 17:46
Будьте осторожны с этим, который вы действительно хотитевсе в этом каталоге в этом другом каталоге!
 Boris D. Teoharov20 авг. 2014 г., 21:03
Совет: обратите внимание, однако, что использование этого шаблона зависит отextglob, Вы можете включить его, используяshopt -s extglob (Если ты хочешьextended globs быть включен по умолчанию вы можете добавитьshopt -s extglob в .bashrc)

а не в каталоге ./exclude/, в / где угодно ...

find -E . -not -type d -and -not -regex '\./exclude/.*' -exec echo mv {} /wherever \;
 Rasika Perera02 июл. 2015 г., 07:04
это будет игнорировать структуру каталогов и копировать все файлы в подкаталогах в одну структуру плоских папок. a / b / c / -> / где угодно a / b.txt -> / где угодно
 Marecky23 янв. 2019 г., 14:36
я получилunknown predicate '-E'

find /source/directory -name ignore-directory-name -prune -print0 | xargs -0 mv --target-directory=/target/directory

Обратите внимание, что это почти скопировано со страницы руководства по поиску (я думаю, что использование mv --target-directory лучше, чем cpio).

Ваш ответ на вопрос