Bash 스크립트를 사용하여 기존 파일에서 파일 만들기

Bash 스크립트를 사용하여 기존 파일에서 파일 만들기

다음과 같은 말도 안되는 이름의 파일이 포함된 디렉토리가 있습니다.

apple_2020-01-01.txt
apple_2020-01-02.txt
orange_2020-01-01.txt
pear_2020-01-02.txt
pear_2020-01-03.txt
pear_2020-01-04.txt

bash 스크립트를 사용하여 파일의 타임스탬프를 기반으로 각 고유 타임스탬프에 대해 하나씩 새 파일을 만들고 싶습니다.

몇 가지 가정을 할 수 있습니다.

1) 파일 이름은 항상 Fruit_*.txt 형식을 따릅니다.

2) 파일 이름은 apple, orange 또는 pear로 지정됩니다.

3) 타임스탬프는 항상 YYYY-MM-DD 형식입니다.

위의 샘플 파일을 기반으로 스크립트에서 다음 파일을 생성하고 싶습니다.

NewFile_2020-01-01.txt
NewFile_2020-01-02.txt
NewFile_2020-01-03.txt
NewFile_2020-01-04.txt

이 목표를 어떻게 달성할 수 있나요?

답변1

#!/bin/bash
shopt -s nullglob
for file in {apple,pear,orange}_*.txt; do
    touch "NewFile_${file##*_}";
done

각 파일에 대해 밑줄 문자까지 앞부분을 제거하여 타임스탬프와 확장자만 남겨두고 NewFile_결과에 추가합니다.

touch이미 존재하는 파일을 생성하려고 해도 불평하지 않습니다.

이 솔루션은 밑줄 뒤에 공백이 있는 경우에도 작동합니다.

답변2

#!/bin/bash
printf '%s\n' {apple,orange,pear}_*.txt | 
     sed 's/apple\|orange\|pear/NewFile' |
     sort -u |
     xargs touch

쉘 glob을 사용하여 파일 이름을 얻고(그렇지 않으면 실패하며 문제를 일으킬 수 있는 수만 개가 있습니다), sed를 사용하여 이름을 변경한 다음 sort -u를 사용하여 중복 항목을 제거합니다.

마지막으로 xargs touch에 피드하여 OP의 명확한 설명을 기반으로 파일을 만듭니다.

답변3

ls *.txt | cut -f2- -d_ | sort -u | xargs -IX touch NewFile_X

  • cut구분 기호가 다음과 같은 두 번째 "필드"가 주어지면_

  • sort속이는 항목 정렬 및 제거( unique )

  • xargs명령을 실행 하고 다른 명령의 명령으로 touch바꾸기X

관련 정보