Если мне назвали тысячи папок a/ b/ c/
и т.д., как я могу копировать их и их содержание, многократно таким образом, что скопированной папке дали бы другое имя, например, a-copy1/ b-copy1/ c-copy1/ ... a-copy12/ b-copy12/ c-copy12/
Этот сценарий должен сделать это возможным:
#! /usr/bin/env bash
set -e
for i in /path/to/folder
do
if [ -d "$i" ]
then
for r in $(seq 1 5)
do
cp -r "$i" "$i"\-copy"$r"
done
fi
done
информация:
for r in $(seq 1 5)
: Это позволяет Вам выбирать количество копий для создания. if [ -d "$i" ]
: проверьте, является ли цель папкой. cp -r "$i" "$i"\-copy"$r"
: выполните копию. set -e
: остановитесь на первой ошибке. Демонстрационные данные:
a b c d e f
Демонстрационный вывод:
a a-copy3 b b-copy3 c c-copy3 d d-copy3 e-copy2 e-copy5 f-copy2 f-copy5
a-copy1 a-copy4 b-copy1 b-copy4 c-copy1 c-copy4 d-copy1 d-copy4 e e-copy3 f f-copy3
a-copy2 a-copy5 b-copy2 b-copy5 c-copy2 c-copy5 d-copy2 d-copy5 e-copy1 e-copy4 f-copy1 f-copy4
Если у Вас есть "тысячи" файлов, и/или каталоги для обработки, find
и xargs
являются предпочтительными инструментами. Читайте man find
и man xargs
.
find . -maxdepth 1 -type d -print0 |\
xargs -0 --no-run-if-empty bash_script
, Где bash_script
файл (режим 755), в Вашем $PATH
содержащий написанный пользователем сценарий, чтобы сделать копирование.
Попробуйте в своем каталоге:
ls | grep "pattern" | xargs -i mkdir "{}-copy1"
Вы доберетесь, все папки с "шаблоном" получают дубликат и переименовывают с-copy1 в конце.
Можно записать простой сценарий удара как:
for i in {1..10}; do
for dir in $(find /src/dir -maxdepth 1 -type d); do
cp -r $dir /dst/dir/$dir-copy$i;
done
done
Этот отрывок сделает 10 копий каталогов расположенными на/src/dir к/dst/dir