Рекурсивно конвертировать все имена папок и файлов в нижний или верхний регистр - PullRequest
2 голосов
/ 06 апреля 2011

У меня есть структура папок, как показано ниже. -FOO -BAG Rose.TXT -BAR JaCk.txt

Мне нужен следующий вывод.

-foo -bag rose.txt -bar jack.txt

Ответы [ 6 ]

8 голосов
/ 06 апреля 2011

Я понимаю, что вам нужен код ruby, но я представляю вам один лайнер для запуска в вашей оболочке:

for i in `find * -depth`; do (mv $i `echo $i|tr [:upper:] [:lower:]`); done

, как показано здесь: http://ubuntuforums.org/showthread.php?t=244738

Запустите его один раз,и это должно сработать.

Обновление

Рубиновый код:

Dir.glob("./**/*").each do |file|
  File.rename(file, file.downcase) #or upcase if you want to convert to uppercase
end
2 голосов
/ 06 апреля 2011
Dir["**/*"].each {|f| File.rename(f, f.downcase)}
0 голосов
/ 03 января 2014

Принятый ответ не работает: когда он пытается сначала преобразовать каталог, а затем файл в этом каталоге.

Вот код, который работает:

Dir.glob("./**/*").sort{|x| x.size}.each do |name|
  x = name.split('/')
  newname = (x[0..-2] + [x[-1].downcase]).join('/')
  File.rename(name, newname) 
end

(сортирует список по длине, поэтому директория будет преобразована после файла в нем)

0 голосов
/ 06 апреля 2011

Если вы хотите рекурсивно переименовывать свои файлы, вы можете использовать **/*

folder = "/home/prince"
Dir["#{folder}/**/*"].each {|file| File.rename(file, file.downcase)}

Если вы хотите, чтобы вывод массива файлов выводился строчными буквами

Dir["#{folder}/**/*"].map(&:downcase)
0 голосов
/ 06 апреля 2011

Немного Find.find - это все, что вам нужно:

require 'find'
Find.find(directory) do |path|
    if(path != '.' && path != '..')
        File.rename(path, path.downcase)
    end
end
0 голосов
/ 06 апреля 2011

Список рекурсивных каталогов:

http://www.mustap.com/rubyzone_post_162_recursive-directory-listing

Преобразование в верхний / нижний регистр:

http://www.programmingforums.org/thread5455.html

Наслаждайтесь:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...