Hard Link Generator
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/env -S crystal build | |
# Hard Link Generator | |
# Generates hard links for all files in a given folder, | |
# while also finding and replacing strings in the filenames. | |
# | |
# The folder is created for you, but existing files (Running it twice?) will cause errors. | |
# | |
# Usage: | |
# Hard Link Generator - (c) Erisa A 2020. | |
# -h, --help Show help | |
# -s SOURCE_DIR, --src SOURCE_DIR The directory containing source files. | |
# -d DEST_DIR, --dest DEST_DIR The directory where output hard links should be dropped. | |
# -f SEARCHTEXT, --find SEARCHTEXT Text to match in source filenames. | |
# -r REPLACETEXT, --replace REPLACETEXT Text to replace in source filenames | |
# Example: | |
# $ ./hlg --src 'test series' --dest 'emby/test' --find 'test pattern ' --replace 'test S0E' | |
# [debug] files found: ["test pattern 01.mkv", "test pattern 02.mkv", "test pattern 03.mkv", "test pattern 04.mkv", "test pattern 05.mkv", "test pattern 06.mkv", "test pattern 07.mkv", "test pattern 09.mkv"] | |
# 'test series/test pattern 01.mkv' => 'emby/test/test S0E01.mkv' | |
# 'test series/test pattern 02.mkv' => 'emby/test/test S0E02.mkv' | |
# 'test series/test pattern 03.mkv' => 'emby/test/test S0E03.mkv' | |
# 'test series/test pattern 04.mkv' => 'emby/test/test S0E04.mkv' | |
# 'test series/test pattern 05.mkv' => 'emby/test/test S0E05.mkv' | |
# 'test series/test pattern 06.mkv' => 'emby/test/test S0E06.mkv' | |
# 'test series/test pattern 07.mkv' => 'emby/test/test S0E07.mkv' | |
# 'test series/test pattern 09.mkv' => 'emby/test/test S0E09.mkv' | |
# | |
require "file_utils" | |
require "option_parser" | |
dest_folder = "" | |
src_folder = "" | |
find = "" | |
replace = "" | |
option_parser = OptionParser.parse do |parser| | |
parser.banner = "Hard Link Generator - (c) Erisa A 2020." | |
parser.on "-h", "--help", "Show help" do | |
puts parser | |
exit | |
end | |
parser.on "-s SOURCE_DIR", "--src SOURCE_DIR", "The directory containing source files." do |src_input| | |
src_folder = src_input | |
end | |
parser.on "-d DEST_DIR", "--dest DEST_DIR", "The directory where output hard links should be dropped." do |dest_input| | |
dest_folder = dest_input | |
end | |
parser.on "-f SEARCHTEXT", "--find SEARCHTEXT", "Text to match in source filenames." do |find_input| | |
find = find_input | |
end | |
parser.on "-r REPLACETEXT", "--replace REPLACETEXT", "Text to replace in source filenames." do |replace_input| | |
replace = replace_input | |
end | |
end | |
if dest_folder == "" || src_folder == "" | |
puts "I need at least input and output folders." | |
puts option_parser | |
exit | |
end | |
FileUtils.mkdir_p(dest_folder) | |
dir = Dir.new(src_folder) | |
files = [] of String | |
while file = dir.read | |
files << file unless file == "." || file == ".." | |
end | |
files = files.sort | |
puts "[debug] files found: #{files}" | |
files.each {|x| | |
new_x = x.gsub(find, replace) | |
puts "'#{src_folder}/#{x}' => '#{dest_folder}/#{new_x}'" | |
FileUtils.ln("#{src_folder}/#{x}", "#{dest_folder}/#{new_x}") | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment