Как создать каталоги с тем же родительским именем?
В моей библиотеке у меня следующий макет:
DataFolder
PATIENT A
FOLDER1
FOLDER2
FOLDER#
PATIENT B
FOLDER1
FOLDER2
FOLDER#
В каждой из папок Я хочу создать подпапку с именем пациента , например xxPatient A и т. Д. затем в ЭТИХ папках я хочу создать еще две папки с именами «TypeX» и «Typez»
Как я могу это сделать? Это то, что у меня есть на данный момент ...
cd /mnt/d/DataFolder
for i in *
do
cd ${i}
for j in FOLDER*
do
cd ${j}
mkdir
cd ../
done
cd ../
done
Это то, что я хочу в итоге:
DataFolder
PATIENT A
FOLDER1
xxPATIENTA
TypeX
TypeZ
FOLDER2
xxPATIENTA
TypeX
TypeZ
PATIENT B
FOLDER1
xxPATIENTB
TypeX
TypeZ
FOLDER2
xxPATIENTB
TypeX
TypeZ
FOLDER#
xxPATIENTB
TypeX
TypeZ
while IFS=/ read -d '' -r a b c; do
mkdir -p "$a/$b/$c/xx${b// /}"/Type{X,Y}
done < <(shopt -s failglob; printf %s\\0 DataFolder/*/*)
Начиная с такой структуры ...
DataFolder
├── PATIENT A
│ ├── FOLDER1
│ └── FOLDER2
└── PATIENT B
├── FOLDER1
├── FOLDER2
└── FOLDER3
Используйте следующий сценарий bash ...
SAVEIFS=$IFS; IFS=$(echo -en "\n\b");
for patient_name in `ls -1 DataFolder`; do
echo "Processing ${patient_name}"
for sub_folder_name in `ls -1 DataFolder/${patient_name}`; do
echo " Processing ${sub_folder_name}"
mkdir -p "DataFolder/${patient_name}/${sub_folder_name}/xx${patient_name}/"{"TypeX","TypeY"}
done
done
IFS=$SAVEIFS
... чтобы создать такую структуру папок ...
DataFolder
├── PATIENT A
│ ├── FOLDER1
│ │ └── xxPATIENT A
│ │ ├── TypeX
│ │ └── TypeY
│ └── FOLDER2
│ └── xxPATIENT A
│ ├── TypeX
│ └── TypeY
└── PATIENT B
├── FOLDER1
│ └── xxPATIENT B
│ ├── TypeX
│ └── TypeY
├── FOLDER2
│ └── xxPATIENT B
│ ├── TypeX
│ └── TypeY
└── FOLDER3
└── xxPATIENT B
├── TypeX
└── TypeY
Пояснение:
mkdir
создает нужную структуру папок. Он использует флаг -p
для создания всех родительских папок в предоставленном аргументе пути. mkdir
стоит {"TypeX", "TypeY"}
. Это сообщает bash, что вы хотите создать две папки с именами «TypeX» и «TypeY» в одном месте.