텍스트 파일 줄의 특정 부분에서 폴더 만들기

텍스트 파일 줄의 특정 부분에서 폴더 만들기

내 상위 폴더에는 하위 폴더가 포함되어 있습니다. 각 하위 폴더에는 다음과 같은 폴더가 있습니다.

Parent_folder
folder1
  folder_01_PAP_515151
  folder_02_PAPA_554651
  folder_03_PAPX_541313
  folder_04_PAP_654123
folder2
  folder_20_PAP_413513
  folder_02_PAPD_521354
  folder_055_PAP_685413
  folder_100_PAP_132312
folder3
  folder_11_PAPE_5313351
  folder_32_PAP_3513131
  folder_53_PAP_3213321
  folder_84_PAP_3313213

..

다음 명령을 사용하여 "를 포함하는 모든 폴더와 하위 폴더를 나열합니다.폐 고혈압"를 입력하고 텍스트 파일 "list.txt"에 저장합니다.

find -type d -name "*_PAP_" > list.txt

출력은 다음과 같습니다.

  ./folder1/folder_01_PAP_515151
  ./folder1/folder_04_PAP_654123
  ./folder1/folder_20_PAP_413513
  ./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

이 목록에서 새 폴더를 만들고 싶습니다. 새 폴더의 이름에는 "055_PAP", "32_PAP", "53_PAP"와 같은 이전 목록의 "3자리_PAP" 부분이 포함되어야 합니다.... 새로 생성된 폴더 목록은 다음과 같아야 합니다.

 01_PAP
 04_PAP
 20_PAP
 055_PAP
 100_PAP
 32_PAP
 53_PAP
 84_PAP

답변1

파일( 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하고 실제로 수행하십시오.

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» 정규 표현식:
    • [.]한 지점
    • /folder정확히 그것이 말하는 것입니다.
    • [0-9]숫자.
    • +하나 이상의 선행 원자(숫자)(따라서 하나 이상의 숫자).
    • /folder_정확히 그것이 말하는 것입니다.
  • «replace_with» 다른 것으로 바꾸십시오. 이 경우에는 아무것도 아닙니다.
  • 이 경우 "옵션"을 참고하세요. 다른 옵션에는 i대소문자 무시가 포함되어 있으며 g여러 번 수행하세요(첫 번째 문자열만 찾는 것이 아님).

sed/언어는 rename복잡하지만 매우 강력합니다. 당신이 사용할 주요 것은 s(여기서 사용된 것과 같이) 아마도 next 이며 y, 그것들은 배울 가치가 있습니다. 또한 정규식(grep 및 기타 명령에도 사용됨)을 배워야 합니다.

관련 정보