Мне интересно - как я могу перемещать все файлы в каталоге, кроме этих файлов в определенном каталоге (поскольку "mv" не имеет опции "-exclude" )?
Как использовать команду "mv" для перемещения файлов, кроме файлов в определенном каталоге?
Ответ 1
Предположим, что структура 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
.
Ответ 2
Так как find имеет параметр exclude, используйте find + xargs + mv:
find /source/directory -name ignore-directory-name -prune -print0 | xargs -0 mv --target-directory=/target/directory
Обратите внимание, что это почти скопировано с страницы поиска (я думаю, что использование mv --target-directory лучше, чем cpio).
Ответ 3
Это не совсем то, что вы просили, но это может сделать следующее:
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
, чтобы помочь вам.
Ответ 4
Это приведет к перемещению всех файлов в каталоге или ниже текущего каталога, а не в каталоге./exclude/в/wherever...
find -E . -not -type d -and -not -regex '\./exclude/.*' -exec echo mv {} /wherever \;
Ответ 5
#!/bin/bash
touch apple banana carrot dog cherry
mkdir fruit
F="apple banana carrot dog cherry"
mv ${F/dog/} fruit
# это удаляет "собаку" из списка F, поэтому она остается в текущем каталоге и не перемещается в "фрукты"
Ответ 6
ls | grep -v exclude-dir | xargs -t -I '{}' mv {} exclude-dir