Raschen
@Raschen

Linux копирование файлов исключая файлы по списку?

Нужно копировать файлы применяя файл исключения ignor.list
ignor.list содержимое файла
3.mp3
4.mp3
6.mp3

Чтобы получалось вот так
dir1                       dir2 
1.mp3                  1.mp3
2.mp3                  2.mp3
3.mp3                  5.mp3
4.mp3                  7.mp3
5.mp3
6.mp3 
7.mp3


Есть еще подводные камни в названиях файлов например (DJ KUBA-NE!TAN - Party On!.mp3, DAVE ARMSTRONG - Make Your Move (Part 2).mp3, LMFAO - Sexy & I Know It.mp3, QUINTINO-CHEAT CODES - Can't Fight It.mp3)
Благо список ignor.list небольшой и редактирую вручную и заносить записи такова вида непроблема (LMFAO\ -\ Sexy\ \&\ I\ Know\ It.mp3)

p.s. Применять можно любые средства cp, find, rsync, скрипты, главное чтоб выполняло задачу
  • Вопрос задан
  • 75 просмотров
Решения вопроса 1
  • Raschen
    @Raschen
    работает забыл еще упомянуть чтобы существующие файлы пропускались а не перезаписывались
    Ответ написан
Пригласить эксперта
Ответы на вопрос 1
  • d0kuro
    @d0kuro
    Тык
    Нет, ну если можно любые средства, например PHP:
    Делайте файл.

    copy.php
    <?php
    $pathFrom = empty($argv[1]) ? die('Источник файлов не задан\n') : $argv[1];
    $pathTo = empty($argv[2]) ? die('Конечный путь для копирования не задан\n') : $argv[2];
    $ignoreList = empty($argv[3]) ? die('Файл исключений не найден\n') : $argv[3];
    
    if (!file_exists($pathFrom) OR !file_exists($pathTo))
    {
        die('Одна из папок (источник или назначение) не была найдена\n');
    }
    
    $ignoreFiles = file_get_contents($ignoreList);
    $ignoreFiles = explode(PHP_EOL, $ignoreFiles);
    $ignoreFiles = array_merge($ignoreFiles, ['.', '..']);
    
    $files = scandir($pathFrom);
    
    foreach ($files as $file) 
    {
        if (in_array($file, $ignoreFiles)) continue;
        
        if (copy("{$pathFrom}/{$file}", "{$pathTo}/{$file}"))
        {
            echo "Файл: {$file} успешно копирован\n";
        }
        else
        {
            echo "Файл: {$file} не удалось перенести\n";
        }
    }


    Делайте в любом месте файл исключений, называйте как хотите, исключения писать построчно: строка - файл

    И запускаете вот так:

    php copy.php /var/files/откуда /var/files/куда /var/ingorelist.txt


    Я даже проверил, всё работает, ничего экранировать не придётся даже в названиях файлов.
    Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы