Хотя содержимое каталога становится недоступным, когда вы монтируете файловую систему сверху, они не теряются. Размонтирование файловой системы должно сделать их видимыми снова. Что-то вроде следующего:
sudo umount ~
Одним из способов достижения этого может быть использование Negative Lookbehind для соответствия только последовательности символов слова-границы слова, когда ему не предшествует буквальный период, например. (
$ ls
alan's file.txt bar.txt foo
, тогда
$ rename -n 's/(?<!\.)\b\w*/\u$&/g' *
rename(alan's file.txt, Alan'S File.txt)
rename(bar.txt, Bar.txt)
rename(foo, Foo)
Предполагая, что вы также хотите избежать использования плюрализации s, мы можем изменить это на
$ rename -n 's/(?<![.'\''])\b\w*/\u$&/g' *
rename(alan's file.txt, Alan's File.txt)
rename(bar.txt, Bar.txt)
rename(foo, Foo)
или даже
$ rename -n 's/(?<![[:punct:]])\b\w*/\u$&/g' *
rename(alan's file.txt, Alan's File.txt)
rename(bar.txt, Bar.txt)
rename(foo, Foo)
Одним из способов достижения этого может быть использование Negative Lookbehind для соответствия только последовательности символов слова-границы слова, когда ему не предшествует буквальный период, например. (
$ ls
alan's file.txt bar.txt foo
, тогда
$ rename -n 's/(?<!\.)\b\w*/\u$&/g' *
rename(alan's file.txt, Alan'S File.txt)
rename(bar.txt, Bar.txt)
rename(foo, Foo)
Предполагая, что вы также хотите избежать использования плюрализации s, мы можем изменить это на
$ rename -n 's/(?<![.'\''])\b\w*/\u$&/g' *
rename(alan's file.txt, Alan's File.txt)
rename(bar.txt, Bar.txt)
rename(foo, Foo)
или даже
$ rename -n 's/(?<![[:punct:]])\b\w*/\u$&/g' *
rename(alan's file.txt, Alan's File.txt)
rename(bar.txt, Bar.txt)
rename(foo, Foo)
Одним из способов достижения этого может быть использование Negative Lookbehind для соответствия только последовательности символов слова-границы слова, когда ему не предшествует буквальный период, например. (
$ ls
alan's file.txt bar.txt foo
, тогда
$ rename -n 's/(?<!\.)\b\w*/\u$&/g' *
rename(alan's file.txt, Alan'S File.txt)
rename(bar.txt, Bar.txt)
rename(foo, Foo)
Предполагая, что вы также хотите избежать использования плюрализации s, мы можем изменить это на
$ rename -n 's/(?<![.'\''])\b\w*/\u$&/g' *
rename(alan's file.txt, Alan's File.txt)
rename(bar.txt, Bar.txt)
rename(foo, Foo)
или даже
$ rename -n 's/(?<![[:punct:]])\b\w*/\u$&/g' *
rename(alan's file.txt, Alan's File.txt)
rename(bar.txt, Bar.txt)
rename(foo, Foo)
Это будет использовать первую букву каждого слова, кроме последнего расширения:
rename -n 's/\b(.+?)\b/\u$1/g; s/(.+)\.(.)/$1\.\l$2/' *
Я тестировал эти файлы:
$ ls -1
'a file with a '$'\n''new line.foo'
'a file with spaces.txt'
justonelongfilename.ext
no-extensions-here
this.has.many.extensions.pdf
И он переименует их как:
$ rename -n 's/\b(.+?)\b/\u$1/g; s/(.+)\.(.)/$1\.\l$2/' *
a file with a
new line.foo -> A File With A
New Line.foo
a file with spaces.txt -> A File With Spaces.txt
justonelongfilename.ext -> Justonelongfilename.ext
no-extensions-here -> No-Extensions-Here
this.has.many.extensions.pdf -> This.Has.Many.Extensions.pdf
Хитрость состоит в том, чтобы сначала загладить каждую первую букву, игнорируя расширения, а затем вернуться назад и сделать расширение в нижнем регистре:
s/\b(.+?)\b/\u$1/g;: .+? это не-жадный шаблон, что означает, что он найдет кратчайшее совпадение. Поскольку он привязан границами слов (\b), это найдет все слова (все из-за окончательного g). Затем они заменяются капитализированной (с первой буквой) версией самих себя (\l$1). s/(.+)\.(.)/$1\.\l$2/: .+ жадный, поэтому он найдет максимально возможное совпадение. Это означает, что самая длинная строка до окончательного ., после которой будет расширение (если оно есть). Мы заменяем совпадение всем до расширения ($1), a . и продолжением с первой буквой нижней обложки (\l$2).Рекурсия также достаточно проста. Если ваша оболочка bash (если вы этого не знаете, возможно, это так), вы можете использовать опцию globstar, которая делает ** совпадением 0 или более подкаталогов:
shopt -s globstar
Теперь запустите переименование (это будет также работать с любыми файлами в вашем текущем каталоге):
rename -n 's/\b(.+?)\b/\u$1/g; s/(.*)\.(.)/$1\.\l$2/' **
Чтобы ограничить его только файлами или каталогами с расширениями, используйте **/*.* вместо **.
В качестве альтернативы используйте find:
find /path/to/dir -exec rename -n 's/\b(.+?)\b/\u$1/g; s/(.*)\.(.)/$1\.\l$2/' {} +
И, чтобы ограничить эти файлы и каталоги с расширением:
find /path/to/dir -name '*.*' -exec rename -n 's/\b(.+?)\b/\u$1/g; s/(.*)\.(.)/$1\.\l$2/' {} +
Обратите внимание, что все из этих решений будет весело переименовывать каталоги, а также файлы. Если вы этого не хотите, будьте осторожны, когда вы скажете, чтобы он рекурсировал, или дайте ему более конкретный шаблон, например *.txt.
все эти решения будет весело переименовывать каталоги, а также файлы . -n заставляет rename просто печатать, что он будет делать, а на самом деле ничего не делать. Полезно для тестирования.
Наиболее разумным способом было бы занятие всех «слов» (с использованием границы слова \b и обращение через $1 к любому первому символу), включая расширение, но затем в нижнем регистре самого расширения:
[ f1]Обратите внимание, что это не работает для имени файла с символами подчеркивания, то есть границы слова «слово» рассматриваются в пробелах (вкладки, пробелы, строки новой строки, которые, надеюсь, не должны быть в имени файла).
[d2 ] Обратите внимание на использование prename для переносимости на ksh, где rename - фактически встроенная команда, а не автономный исполняемый файл perl.Просто используйте rename 's/\b(\w)/\u$1/' * БЕЗ флага g. Флаг g означает «global = сделать это несколько раз». Вы делаете первый раз в имени файла, и вы не хотите делать заглавные буквы во второй раз?
Наиболее разумным способом было бы занятие всех «слов» (с использованием границы слова \b и обращение через $1 к любому первому символу), включая расширение, но затем в нижнем регистре самого расширения:
$ prename -nv 's/\b(.)/\u$1/g;s/^(.*)\.(.*)/$1.\l$2/' *
another filename trispaced.txt renamed as Another Filename Trispaced.txt
filename_with_underschore.txt renamed as Filename_with_underschore.txt
one filename.txt renamed as One Filename.txt
Обратите внимание, что это не работает для имени файла с символами подчеркивания, то есть границы слова «слово» рассматриваются в пробелах (вкладки, пробелы, строки новой строки, которые, надеюсь, не должны быть в имени файла).
Обратите внимание на использование prename для переносимости на ksh, где rename - фактически встроенная команда, а не автономный исполняемый файл perl.
Это будет использовать первую букву каждого слова, кроме последнего расширения:
rename -n 's/\b(.+?)\b/\u$1/g; s/(.+)\.(.)/$1\.\l$2/' *
Я тестировал эти файлы:
$ ls -1
'a file with a '$'\n''new line.foo'
'a file with spaces.txt'
justonelongfilename.ext
no-extensions-here
this.has.many.extensions.pdf
И он переименует их как:
$ rename -n 's/\b(.+?)\b/\u$1/g; s/(.+)\.(.)/$1\.\l$2/' *
a file with a
new line.foo -> A File With A
New Line.foo
a file with spaces.txt -> A File With Spaces.txt
justonelongfilename.ext -> Justonelongfilename.ext
no-extensions-here -> No-Extensions-Here
this.has.many.extensions.pdf -> This.Has.Many.Extensions.pdf
Хитрость состоит в том, чтобы сначала загладить каждую первую букву, игнорируя расширения, а затем вернуться назад и сделать расширение в нижнем регистре:
s/\b(.+?)\b/\u$1/g;: .+? это не-жадный шаблон, что означает, что он найдет кратчайшее совпадение. Поскольку он привязан границами слов (\b), это найдет все слова (все из-за окончательного g). Затем они заменяются капитализированной (с первой буквой) версией самих себя (\l$1). s/(.+)\.(.)/$1\.\l$2/: .+ жадный, поэтому он найдет максимально возможное совпадение. Это означает, что самая длинная строка до окончательного ., после которой будет расширение (если оно есть). Мы заменяем совпадение всем до расширения ($1), a . и продолжением с первой буквой нижней обложки (\l$2).Рекурсия также достаточно проста. Если ваша оболочка bash (если вы этого не знаете, возможно, это так), вы можете использовать опцию globstar, которая делает ** совпадением 0 или более подкаталогов:
shopt -s globstar
Теперь запустите переименование (это будет также работать с любыми файлами в вашем текущем каталоге):
rename -n 's/\b(.+?)\b/\u$1/g; s/(.*)\.(.)/$1\.\l$2/' **
Чтобы ограничить его только файлами или каталогами с расширениями, используйте **/*.* вместо **.
В качестве альтернативы используйте find:
find /path/to/dir -exec rename -n 's/\b(.+?)\b/\u$1/g; s/(.*)\.(.)/$1\.\l$2/' {} +
И, чтобы ограничить эти файлы и каталоги с расширением:
find /path/to/dir -name '*.*' -exec rename -n 's/\b(.+?)\b/\u$1/g; s/(.*)\.(.)/$1\.\l$2/' {} +
Обратите внимание, что все из этих решений будет весело переименовывать каталоги, а также файлы. Если вы этого не хотите, будьте осторожны, когда вы скажете, чтобы он рекурсировал, или дайте ему более конкретный шаблон, например *.txt.
все эти решения будет весело переименовывать каталоги, а также файлы . -n заставляет rename просто печатать, что он будет делать, а на самом деле ничего не делать. Полезно для тестирования.
Просто используйте rename 's/\b(\w)/\u$1/' * БЕЗ флага g. Флаг g означает «global = сделать это несколько раз». Вы делаете первый раз в имени файла, и вы не хотите делать заглавные буквы во второй раз?
Наиболее разумным способом было бы занятие всех «слов» (с использованием границы слова \b и обращение через $1 к любому первому символу), включая расширение, но затем в нижнем регистре самого расширения:
$ prename -nv 's/\b(.)/\u$1/g;s/^(.*)\.(.*)/$1.\l$2/' *
another filename trispaced.txt renamed as Another Filename Trispaced.txt
filename_with_underschore.txt renamed as Filename_with_underschore.txt
one filename.txt renamed as One Filename.txt
Обратите внимание, что это не работает для имени файла с символами подчеркивания, то есть границы слова «слово» рассматриваются в пробелах (вкладки, пробелы, строки новой строки, которые, надеюсь, не должны быть в имени файла).
Обратите внимание на использование prename для переносимости на ksh, где rename - фактически встроенная команда, а не автономный исполняемый файл perl.
Это будет использовать первую букву каждого слова, кроме последнего расширения:
rename -n 's/\b(.+?)\b/\u$1/g; s/(.+)\.(.)/$1\.\l$2/' *
Я тестировал эти файлы:
$ ls -1
'a file with a '$'\n''new line.foo'
'a file with spaces.txt'
justonelongfilename.ext
no-extensions-here
this.has.many.extensions.pdf
И он переименует их как:
$ rename -n 's/\b(.+?)\b/\u$1/g; s/(.+)\.(.)/$1\.\l$2/' *
a file with a
new line.foo -> A File With A
New Line.foo
a file with spaces.txt -> A File With Spaces.txt
justonelongfilename.ext -> Justonelongfilename.ext
no-extensions-here -> No-Extensions-Here
this.has.many.extensions.pdf -> This.Has.Many.Extensions.pdf
Хитрость состоит в том, чтобы сначала загладить каждую первую букву, игнорируя расширения, а затем вернуться назад и сделать расширение в нижнем регистре:
s/\b(.+?)\b/\u$1/g;: .+? это не-жадный шаблон, что означает, что он найдет кратчайшее совпадение. Поскольку он привязан границами слов (\b), это найдет все слова (все из-за окончательного g). Затем они заменяются капитализированной (с первой буквой) версией самих себя (\l$1). s/(.+)\.(.)/$1\.\l$2/: .+ жадный, поэтому он найдет максимально возможное совпадение. Это означает, что самая длинная строка до окончательного ., после которой будет расширение (если оно есть). Мы заменяем совпадение всем до расширения ($1), a . и продолжением с первой буквой нижней обложки (\l$2).Рекурсия также достаточно проста. Если ваша оболочка bash (если вы этого не знаете, возможно, это так), вы можете использовать опцию globstar, которая делает ** совпадением 0 или более подкаталогов:
shopt -s globstar
Теперь запустите переименование (это будет также работать с любыми файлами в вашем текущем каталоге):
rename -n 's/\b(.+?)\b/\u$1/g; s/(.*)\.(.)/$1\.\l$2/' **
Чтобы ограничить его только файлами или каталогами с расширениями, используйте **/*.* вместо **.
В качестве альтернативы используйте find:
find /path/to/dir -exec rename -n 's/\b(.+?)\b/\u$1/g; s/(.*)\.(.)/$1\.\l$2/' {} +
И, чтобы ограничить эти файлы и каталоги с расширением:
find /path/to/dir -name '*.*' -exec rename -n 's/\b(.+?)\b/\u$1/g; s/(.*)\.(.)/$1\.\l$2/' {} +
Обратите внимание, что все из этих решений будет весело переименовывать каталоги, а также файлы. Если вы этого не хотите, будьте осторожны, когда вы скажете, чтобы он рекурсировал, или дайте ему более конкретный шаблон, например *.txt.
все эти решения будет весело переименовывать каталоги, а также файлы . -n заставляет rename просто печатать, что он будет делать, а на самом деле ничего не делать. Полезно для тестирования.
Просто используйте rename 's/\b(\w)/\u$1/' * БЕЗ флага g. Флаг g означает «global = сделать это несколько раз». Вы делаете первый раз в имени файла, и вы не хотите делать заглавные буквы во второй раз?