Подтвердить что ты не робот

Как использовать команду "mv" для перемещения файлов, кроме файлов в определенном каталоге?

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

4b9b3361

Ответ 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