Перемещение файлов на основе списка старых и новых путей к файлам

Что такое эффективный способ переименования файлов в OSX / BSD из текстового файла для файлов, предположительно находящихся в исходной папке, но в формате;

/path/old file name.ext \ t new file name.ext

Там могут быть указаны тысячи записей с использованием разделителя TAB между записями. И любой разделитель строк, используемый в Windows, OSX или Linux.

Имена файлов могут содержать любой допустимый символ, включая символы _ '!? ~ * & ^% $ # @. Σ'® † ¥ ¨¬˚Δ˙ © ƒ и азиатские шрифты

Имена заканчиваются пунктирным расширением, например .xxx .

    One Solution collect form web for “Перемещение файлов на основе списка старых и новых путей к файлам”

    Обновленная версия:

    Этот вопрос принимает в качестве спецификации:

    • Каждый оператор на одной строке
    • Записи разделяются символом \t .

    Это делает его намного проще:

     require 'fileutils' File.open("input.txt", 'r').each_line do |l| next if l.strip.empty? f = l.split("\t") dir = File.dirname f[0] if File.exists? f[0] p "Moving #{f[0]} to #{dir}/#{f[1].strip}" # FileUtils.mv f[0], "#{dir}/#{f[1].strip}" else p "#{f[0]} does not exist." end end 

    Сохраните это как файл и вызовите его с ruby filename.rb . Он будет читать из input.txt в том же каталоге и просто перемещать файлы.

    # FileUtils… строку # FileUtils… чтобы на самом деле что-то переместить. Это должно сказать вам, если исходный файл не найден.


    Ваша исходная спецификация ввода:

    • Каждый оператор на одной строке
    • Записи не завершаются или не разделяются, за исключением их расширения
    • Записи могут содержать пробелы, а разделителем может быть несколько пробелов («не менее 1 пробела»)

    Поэтому необходимо вернуться к соответствию первому расширению файла, а затем интерпретировать это как первый аргумент. Затем нам нужно удалить эту часть из исходной строки, удалить начало и конец пробела и построить команду mv .

    Дополнительные допущения:

    • Все расширения имеют только три символа, не более, не менее
    • Имена самих файлов не содержат точки (иначе этот разрыв)

    Поскольку вы находитесь на OS X, давайте просто использовать Ruby:

     require 'fileutils' File.open("input.txt", 'r').each_line do |l| next if l.strip.empty? old_file = l[0, l.index(/\.[a-z0-9]{3}/i) + 4] dir = File.dirname old_file new_filename = l.sub(old_file, '').lstrip.chomp p "Moving #{old_file} to #{dir}/#{new_filename}" # FileUtils.mv old_file, "#{dir}/#{new_filename}" end 
    Interesting Posts

    Создать новый раздел на ssd hard (удалить спящий режим)

    Сделать флеш-накопитель загрузочным с помощью MULTIPLE Windows Installers

    Разрешение редактора кода на Ubuntu

    Есть ли способ синхронизировать контакты Google на вашем iPhone?

    IPsec против L2TP / IPsec

    JPEG против PNG против BMP против GIF против SVG

    Windows Vista Recovery DVD не загружает или не видит существующие разделы

    Почему я должен получать более медленные загрузки на компьютере под управлением Windows, чем мой Mac?

    Папка неверно работает на Windows 7

    Как я могу сказать, кто активно вошел в систему (локально или удаленно) на ПК под управлением Windows 7?

    Конвертировать видео в apng / png?

    Каковы способы контроля и ограничения скорости интернет-соединения, которую получают отдельные компьютеры от моего беспроводного маршрутизатора?

    Сортировка карты по значениям

    Запрос веб-страницы при загрузке файлов через ftp

    Как настроить Windows, чтобы не отключить мой внешний диск?

    Давайте будем гением компьютера.