2014-09-23 3 views
1

Я первый пользователь Ruby (любой программный код, если на то пошло), и я пытаюсь создать скрипт в «горничной», чтобы скопировать всю мою музыку из определенной папки в папку «автоматически добавить в itunes» :Как скопировать определенные типы файлов с Maid?

rule 'Move Downloaded Music to iTunes' do 
    FileUtils.cp_r '/Users/*********/Movies/*********/Music/.', 
    '/Users/*********/Music/iTunes/iTunes Media/Automatically Add to iTunes/', 
    :remove_destination => true 
    end 

Однако, у меня есть, не музыкальные файлы в той же папке, и я хочу, чтобы включать только файлы с аудио форматов (mP3, M4A и т.д.)

Как я могу присоединить этот код так, чтобы Я могу выбрать, какие типы файлов будут скопированы?

Кроме того, в чем разница между cp_r и cp?

Любые советы или улучшения в моем коде более чем приветствуются - я видел, как люди пытаются делать подобные вещи с гораздо более сложным кодом, поэтому в некотором смысле я беспокоюсь, что моя слишком простая ... Спасибо за Помогите!!

ответ

0

Maid provides some helper methods, которая поможет с этим. Давайте соберем их вместе, индивидуально.

# Find all files in your Downloads 
dir('~/Downloads/*') 

# Find **any kind of audio files** in your Downloads 
where_content_type(dir('~/Downloads/*'), 'audio') 

# Copy these specific MP3 files in Downloads to a specific iTunes folder 
copy(['~/Downloads/song_1.mp3', '~/Downloads/song_2.mp3'], 
    '~/Music/iTunes/iTunes Media/Automatically Add to iTunes/') 

# Copy any MP3 files in Downloads to a specific iTunes folder 
copy(dir('~/Downloads/*.mp3'), 
    '~/Music/iTunes/iTunes Media/Automatically Add to iTunes/') 

Мы можем поставить эти части вместе для полного намерения, а именно копирование аудио файлов в «Автоматически добавлять в ITunes» папку.

Maid.rules do 
    rule 'copy audio files to the "Automatically Add to iTunes" folder' do 
    copy(where_content_type(dir('~/Downloads/*'), 'audio'), 
     '~/Music/iTunes/iTunes Media/Automatically Add to iTunes/') 
    end 
end 

Если вы хотите, это можно разбить с помощью переменных - это Ruby в конце концов.

Maid.rules do 
    rule 'copy audio files to the "Automatically Add to iTunes" folder' do 
    files_in_downloads = dir('~/Downloads/*') 
    audio_files_in_downloads = where_content_type(files_in_downloads, 'audio') 
    automatically_add_to_itunes_folder = '~/Music/iTunes/iTunes Media/Automatically Add to iTunes/' 

    copy(audio_files_in_downloads, automatically_add_to_itunes_folder) 
    end 
end 

Надеюсь, это поможет!

0

Чтобы скопировать специальные файлы типа, используйте

Dir.foreach(absolute_path) do |file| 
    if file.downcase.end_with?('.mp3', 'mp4', ....) 
     FileUtils.cp(file, final_dir) 
    end 
end 

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

Ps: cp_r и cp равно cp -r и cp в консоли, значит скопировать папку или только файл.

+0

Есть ли способ сохранить папки, в которых находятся файлы при копировании? Каждый музыкальный файл находится в папке на основе исполнителя в папке src. Также кажется, что мой код не предотвращает дублирование копий ... – SteenJobs

+0

Да, 'FileUtils.cp_r' или' FileUtils.cp' - это просто скопировать папку или файлы, но не удалять исходный код, если не использовать 'FileUtils.mv_r' или' FileUtils.mv' – dddd1919

1

Вы можете использовать Dir::glob, чтобы найти файлы и FileUtils::mv, чтобы переместить их:

require 'fileutils' 

Dir.glob('/Users/.../Music/*.{mp3,m4a}') do |filename| 
    FileUtils.mv(filename, '/Users/.../Automatically Add to iTunes/') 
end