Если у вас есть файл (с именем list
, содержащий следующее, и вы хотите создать каталог для каждого имени строки в файле, где имя каталога - это только часть после ./folder?/folder_
.
./folder1/folder_01_PAP_515151
./folder1/folder_04_PAP_654123
./folder2/folder_055_PAP_685413
./folder2/folder_100_PAP_132312
./folder3/folder_32_PAP_3513131
./folder3/folder_53_PAP_3213321
./folder3/folder_84_PAP_3313213
Тогда вы можете сделать следующее.
cat list | sed -r -e 's~[.]/folder[0-9]+/folder_~~' | xargs -I{} mkdir -p "prefix"{}
Если вы хотите просто переименовать оригинальные папки/каталоги, сохранив оригинальное содержимое, то вы можете сделать так:
Протестируйте этот вариант. Затем удалите -n
из rename, чтобы сделать это по-настоящему.
find . -type d -name "*_PAP_" | rename -n 's~[.]/folder[0-9]+/folder_~~'
Обратите внимание, что шаблон поиска тот же для rename
, что и для sed
. rename
работает с именами файлов, sed
работает с файлами или потоками.
Опции к sed
:
-r
использовать расширенные регулярные выражения (диалект регулярного выражения для использования). -e
Следующий аргумент - выражение (программа sed). 's~[.]/folder[0-9]+/folder_~~'
выражение, заключенное в кавычки, чтобы оболочка не интерпретировала его. Объясненное выражение: s~[.]/folder[0-9]+/folder_~~
s
выполнить поиск и замену~
символ-разделитель он разделяет выражение на секции, вы можете использовать любой символ, но должны использовать один и тот же каждый раз. s~"search_for"~"replace_with"~"options"
или используя другой символ s@"search_for"@"replace_with"@"options"
. [.]
точка/папка
то, что написано. [0-9]
цифра. +
один или более из предшествующего атома (цифры) (таким образом, одна или более цифр). /folder_
то, что написано. i
игнорировать регистр, g
делать это несколько раз (не только первая найденная строка). Язык sed
/rename
очень мощный, хотя и сложный. Основные части, которые вы будете использовать, это s
(как использовано здесь), и, возможно, следующая y
, их стоит изучить. Вам также придется изучить регулярные выражения (также используемые grep и другими командами).