Рекурсивное копирование папок: Shell - PullRequest
0 голосов
/ 21 июня 2019

Мой код принимает два аргумента от пользователя. Моя цель - найти папку, заданную пользователем (первый аргумент) и сделать столько копий, сколько нужно (второй аргумент). На данный момент мой код рекурсивно распечатывает все подкаталоги и файлы в подкаталогах ... Мой код также копирует файлы столько раз, сколько указано пользователем. Однако это моя проблема, моя функция копирования работает только с файлами, а не с папками ... Мне интересно, как изменить функцию копирования (или любую другую часть кода), чтобы она рекурсивно копировала указанную папку вместе со всеми своими оригинальное содержание

Я знаю, что моя функция cp в нижней части кода должна быть изменена на -r ./sourceFolder ./destFolder, но я не знаю, как это сделать с учетом переданных аргументов. В конце концов, имя папки назначения будет просто исходной папкой с увеличивающимся номером в конце.

#!/bin/bash


read -p "Your folder name is $1 and the number of copies is $2. Press Y for yes N for no " -n 1 -r
if ! [[ $REPLY =~ ^[Yy]$ ]]
then
echo
echo "Rerun script and pass in the folder and how many copies yo would like (e.g folder 4)"
exit
fi
echo 
echo "-------------COPY FILE----------------"

FOLDER=$1
for f IN $folder
do
if [ ! -f "$FOLDER" ]
then
echo "folder "$FOLDER" does not exist"
exit 1 
fi 
done

DIR="."

function list_files()
{

cd $1
echo; echo "$(pwd)":; #Display Directory name

for i in *
do
if test -d "$i" #if dictionary
then 
list_files "$i" #recursively list files
cd ..
else
echo "$i"; #Display File name
fi

done
}

j=$2
for i in "$*"
do
DIR=$1 
list_files "$DIR"

 for ((i=1; i<J; i++))
do
cp "$1" "$1$i"; #copies the file i amount of times, and creates new files with names that increment by 1
done
shift 1
done

1 Ответ

0 голосов
/ 21 июня 2019

Если вы хотите скопировать рекурсив, вы можете использовать cp -r <source folder> <destination folder>. Это скопирует содержимое исходного файла в папку назначения.

#!/bin/bash

read -p "Your folder name is $1 and the number of copies is $2. Press Y for yes N for no " -n 1 -r
if ! [[ $REPLY =~ ^[Yy]$ ]]
then
echo
echo "Rerun script and pass in the folder and how many copies yo would like (e.g folder 4)"
exit
fi
echo 
echo "-------------COPY FILE----------------"

FOLDER=$1
if [ ! -d "$FOLDER" ]
then
echo "folder  $FOLDER does not exist"
exit 1 
fi

j=$2
for ((i=1; i<=j; i++))
do
cp  -r "$1" "$1$i"; #copies the file i amount of times, and creates new files with names that increment by 1
echo "folder $1 copied to $1$i"
done

Я изменил проверку папки с -f на -d, изменил имя переменной (регистр), удалил функцию list_files и изменил в последнем цикле for значение i<$j на i<=j, потому что цикл начинается с 1. Затем я добавил -r, и он работает.

...