다음과 같은 말도 안되는 이름의 파일이 포함된 디렉토리가 있습니다.
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
속이는 항목 정렬 및 제거(u
nique )xargs
명령을 실행 하고 다른 명령의 명령으로touch
바꾸기X