Что именно происходит, когда я набираю «startx» в командной строке? [закрыто]

Если у вас есть файл (с именем 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"{}

  • Я сделал так, чтобы номера папок состояли из одной или нескольких цифр.
  • Оставьте "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".
  • "search_for" регулярное выражение:
    • [.] точка
    • /папка то, что написано.
    • [0-9] цифра.
    • + один или более из предшествующего атома (цифры) (таким образом, одна или более цифр).
    • /folder_ то, что написано.
  • "replace_with" На что заменить, в данном случае ни на что.
  • "option" в данном случае примечание, другие включают i игнорировать регистр, g делать это несколько раз (не только первая найденная строка).

Язык sed/rename очень мощный, хотя и сложный. Основные части, которые вы будете использовать, это s (как использовано здесь), и, возможно, следующая y, их стоит изучить. Вам также придется изучить регулярные выражения (также используемые grep и другими командами).

2
07.05.2015, 10:20
0 ответов

Теги

Похожие вопросы