Копирование содержания текущего каталога к подкаталогу

Как я могу использовать терминал Linux для копирования всего в текущем каталоге к подкаталогу?

13
задан 11.07.2018, 21:01

6 ответов

Если Вы захотите скопировать содержание папки рекурсивно (то бросит 1 ошибку, альтернативы ниже):

cp -r * sub/

Немного больше hacky, но работы над непустыми подкаталогами:

TARGETDIR='targetdir here';cp -r `find . -maxdepth 1 ! -name "$TARGETDIR"` "$TARGETDIR"

Другая острота:

TARGETDIR='targetdir here';for file in *;do test "$file" != "$TARGETDIR" && cp "$file" "$TARGETDIR/";done

Или рекурсивный:

TARGETDIR='z';for file in *;do test "$file" != "$TARGETDIR" && cp -r "$file" "$TARGETDIR/";done
12
ответ дан 07.12.2019, 11:37

Предположим, target название целевого подкаталога, если Ваша оболочка является ударом:

shopt -s extglob
cp -r !(target) target/

В ksh можно непосредственно сделать cp -r !(target) target/.

В zsh можно сделать setopt ksh_glob затем cp -r !(target) target/. Другая возможность setopt extended_glob затем cp -r ^target target/.

4
ответ дан 07.12.2019, 11:37

Я предложил бы переместить целевой каталог вне исходного каталога и затем отложил бы его снова; mv свободен (если Вы боитесь перемещаться в другую файловую систему), если Вы не ожидаете, что другие процессы для вмешиваний / вмешались.

Большинство решений, отправленных выше, не будет работать, если будут пробелы в именах файлов. Я предложил бы использовать варианты находки-print0 | xargs-0 или нашел бы - должностное лицо и т.д.

2
ответ дан 07.12.2019, 11:37

Это будет работать на Вас?

cp -r * subdir/

Если бы Вы означали перемещаться вместо того, чтобы копировать все в текущем dir к подкаталогу, то Вы могли сделать:

mv * subdir/
0
ответ дан 07.12.2019, 11:37

Это скопирует все, включая точечные файлы, и не включая сам целевой каталог, к целевому каталогу SUBDIR:

for i in `ls -a | grep -Ev '^(SUBDIR|\.\.?)$'`; do cp $i SUBDIR; done
-1
ответ дан 07.12.2019, 11:37

Это входит, говорят что файл dirCopy.sh



for i in `ls`
do
        if [ $i != "subDir" ]
        then
                `cp -r $i subDir`
        fi
done

выполните его как "sh dirCopy.sh" в Вашей консоли

-1
ответ дан 07.12.2019, 11:37

Теги

Похожие вопросы