[Unix] [Shell Script] Скопируйте все файлы из одной папки в другую - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь создать скрипт оболочки bash для ежедневного cronjob.

Скрипт предназначен для копирования всех файлов с расширением txt (включая подкаталоги) из папки «fromDir» в папку «toDir».

Он также создаст каталог "toDir", если он не существует.

Я пытаюсь использовать tar здесь для сжатия файлов и распаковки после перемещения, чтобы ускорить время, которое он провел во время передачи, целевая папка должна иметь точно такую ​​же структуру, что и исходная.

#!/bin/bash -l

fromDir='c:/fromFolder/' ;
toDir='c:/toFolder/' ;
find $fromDir -maxdepth 3 -name '*.txt' -print |
tar zcvf - -T - |
mkdir -p -m 777 $toDir ;
cd $toDir && tar zxvf -

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

В случае, если вы можете использовать rsync , вы можете попробовать это:

rsync -av --include="*/" --include="*.txt" --exclude="*" ~/from/ ~/to/ --dry-run

Это можно интерпретировать как включение каждого каталога с *.txt и исключение чего-либо еще (порядок важен)

Параметр --dry-run предназначен только для печати того, что будет сделано, но файлы не будут скопированы.

0 голосов
/ 25 апреля 2018

1-й см. Мой комментарий, затем, если вы tar не поддерживает -C аргумент (смените на dir перед tar), вы можете попробовать это:

#!/bin/bash

fromDir='c:/fromFolder/' ;
toDir='c:/toFolder/' ;
mkdir -p -m 777 $toDir ;
find $fromDir -maxdepth 3 -name '*.txt' -print |
tar zcf - -T - | (
    cd $toDir
    tar zxvf -
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...