Как использовать команду " mv " для перемещения файлов, кроме файлов в определенном каталоге?
Мне интересно - как я могу переместить все файлы в каталоге, кроме этих файлов в определенном каталоге (поскольку " mv "не имеет опции "--exclude")?
4 ответов
предположим, что структура dir похожа,
|parent
|--child1
|--child2
|--grandChild1
|--grandChild2
|--grandChild3
|--grandChild4
|--grandChild5
|--grandChild6
и нам нужно переместить файлы, чтобы это выглядело так:
|parent
|--child1
| |--grandChild1
| |--grandChild2
| |--grandChild3
| |--grandChild4
| |--grandChild5
| |--grandChild6
|--child2
в этом случае необходимо исключить два каталога child1
и child2
, и переместить остальные каталоги в .
использовать
mv !(child1|child2) child1
это переместит все остальные каталоги в .
поскольку find имеет опцию exclude, используйте find + xargs + mv:
find /source/directory -name ignore-directory-name -prune -print0 | xargs -0 mv --target-directory=/target/directory
обратите внимание, что это почти скопировано с man-страницы find (я думаю, что использование MV --target-directory лучше, чем cpio).
Это не совсем то, что вы просили, но это может сделать работу:
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
, чтобы помочь вам.
Это переместит все файлы в или ниже текущего каталога не в ./ исключить / каталог в / везде...
find -E . -not -type d -and -not -regex '\./exclude/.*' -exec echo mv {} /wherever \;