Скопируйте определенный файл из каждой подпапки с родительским каталогом - PullRequest
0 голосов
/ 18 марта 2019

Мне нужен способ циклического перемещения по подкаталогам в большом каталоге (/ home / data / playerdata /), чтобы получить определенный файл, сохраняя при этом имя родительских папок того конкретного файла, который я пытаюсь получить.

Мне в основном это нужно для восстановления одного конкретного файла из резервной копии.

Пример:

Основной каталог для зацикливания = /home/minecraft/survival1/plugins/Survival/playerdata/

Путь к конкретному файлу, который я пытаюсь восстановить = /home/minecraft/survival1/plugins/Survival/playerdata/004fc15d-294c-4a42-a1af-1206c148e39b/economy.yml

Пример команды для выполнения сценария в цикле = cp /home/minecraft/survival1/plugins/Survival/playerdata/004fc15d-294c-4a42-a1af-1206c148e39b/economy.yml /restored/playerdata/004fc15d-294c-4a42-a1af-1206c148e39b/economy.yml

Мне нужен сценарий, который будет проходить по каждой папке(Бит UUID) в каталоге «playerdata» и скопируйте этот конкретный файл, сохранив родительскую папку UUID.

Это то, что я пробовал до сих пор:

 for FILE in $BASEDIR
        cp $BASEDIR/FILE/economy.yml /home/restored/FILE/economy.yml

Этоработает на сервере Debian

1 Ответ

1 голос
/ 18 марта 2019

Я бы предложил использовать find для этого:

cd /home/minecraft/survival1/plugins/Survival/playerdata/
find -name "economy.yml" -exec cp --parents {} /home/minecraft/restore/ \; 

--parents сохраняет структуру каталогов при копировании.

Или используя цикл for, как вы пытались:

find . -type f -print0 | while IFS= read -r -d '' filename;
do 
  mkdir --parents "$RESTOREDIR/$player"
  cp "$BASEDIR/$player/economy.yml" "$RESTOREDIR/$player/economy.yml"
done
...