Сценарий оболочки для копирования определенного файла из CSV в другой каталог с той же структурой иерархии папок - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть список файлов, которые нужно скопировать с сервера smb на мой жесткий диск centos7 с csv

missing.csv

Filepath
./2019_06_27_094411_Season_5/Locked_Approved/Master_JPG/501_00001.jpg
./2019_06_27_094411_Season_5/Locked_Approved/Master_JPG/501_00002.jpg
./2019_06_27_094411_Season_5/Locked_Approved/Master_JPG/501_00003.jpg
./2019_06_27_094411_Season_5/Locked_Approved/Master_JPG/501_00004.jpg
./2019_06_27_094411_Season_5/Locked_Approved/Master_JPG/501_00005.jpg
./2019_06_27_094411_Season_5/Locked_Approved/Master_JPG/501_00006.jpg
./2019_06_27_094411_Season_5/Locked_Approved/Master_JPG/501_00007.jpg

Теперь мне нужно скопироватьфайлы из списка csv (то есть) filepath column и вставленные в него на моем локальном диске с той же структурой каталогов.

Я пробовал следующий скрипт и могу копировать только файлы, мне нужен тот же файлкак исходная структура каталогов.- Я установил и установил smbclient в моей машине Centos

script.sh

#!/bin/bash

while read path; do
  cp -v "$path" "$1"
done

CMD: ./script.sh /home/test1 < missing.csv

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Даже если отсутствует .csv содержит пробелы, это хорошо.

script.sh

#!/bin/bash
dest="${1}"
while read l
do
    f="${dest}/${l}"
    d=$(dirname "${f}")
    mkdir -p "${d}"
    cp "${l}" "${f}"                                                            
done
$ cat missing.csv 
./2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00001.jpg
./2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00002.jpg
./2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00003.jpg
./2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00004.jpg
./2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00005.jpg
./2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00006.jpg
./2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00007.jpg
$ ./script.sh ./dest < missing.csv
$ find dest -type f
dest/2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00007.jpg
dest/2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00006.jpg
dest/2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00004.jpg
dest/2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00005.jpg
dest/2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00001.jpg
dest/2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00002.jpg
dest/2019 06 27 094411 Season 5/Locked Approved/Master JPG/501 00003.jpg
0 голосов
/ 27 сентября 2019

Для простых случаев (без пробелов / специальных символов в именах файлов, ...), возможно объединить '--parents' (sugested от cyrus выше) с полным списком файлов.Возможно использование xargs для поддержки большого количества файлов

cp --parents -t "$path" $(cat)
# Using xargs to allow larger number of files
xargs cp --parents -t "$path"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...