Как использовать команду 'mv' для перемещения файлов, кроме тех, которые находятся в определенном каталоге? - PullRequest
34 голосов
/ 06 января 2011

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

Ответы [ 6 ]

67 голосов
/ 09 августа 2013

Предположим, структура dir имеет вид,

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

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

use,

mv !(child1|child2) child1

Все остальные каталоги будут перемещены вchild1 каталог.

3 голосов
/ 06 января 2011

Так как find имеет опцию исключения, используйте find + xargs + mv:

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

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

1 голос
/ 06 января 2011

Это переместит все файлы в текущем каталоге или ниже его, а не в каталоге ./exclude/, в /wherever...

find -E . -not -type d -and -not -regex '\./exclude/.*' -exec echo mv {} /wherever \;
1 голос
/ 06 января 2011

Это не совсем то, что вы просили, но это может сделать работу:

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, который вам поможет.

0 голосов
/ 20 мая 2019
ls | grep -v exclude-dir | xargs -t -I '{}' mv {} exclude-dir
0 голосов
/ 11 апреля 2019
#!/bin/bash

touch apple  banana  carrot  dog  cherry

mkdir fruit

F="apple  banana  carrot  dog cherry"

mv ${F/dog/} fruit

# это удаляет «собаку» из списка F, поэтому она остается в текущем каталоге и не перемещается в «фрукты»

...