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

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

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

  • Удаление заблокированного файла / папки из командной строки
  • Есть ли способ переименовать файлы в нижний регистр?
  • Cp: ​​чтение `filename ': ошибка ввода / вывода ПОЧЕМУ?
  • Как просмотреть метаданные pdf в проводнике Windows?
  • Windows 7, свойства файла, дата изменена, как вы показываете секунды?
  • Постоянное удаление файлов в Mac OS
  • Там могут быть указаны тысячи записей с использованием разделителя TAB между записями. И любой разделитель строк, используемый в Windows, OSX или Linux.

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

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

  • Цвета завершения ZSH и OS X
  • Mac OS X «hosts» файл, могу ли я включить в него другие файлы?
  • Почему OS X не доверяет SSL-сертификату GitHub?
  • Каков самый простой способ получить горячую клавишу yhy-mm-dd hh: mm: ss timestamp на Mac?
  • MacBook (конец 2008 г.) Обновление прошивки EFI 1.8 Проблема
  • Как подключить зашифрованную файловую систему ext3 под OS X?
  • 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 
    Давайте будем гением компьютера.