텍스트 파일의 일치 항목을 기반으로 tar.gz 파일의 이름을 바꾸는 방법

텍스트 파일의 일치 항목을 기반으로 tar.gz 파일의 이름을 바꾸는 방법

내 Linux 시스템의 폴더에는 tar.gz 파일 이름과 일치하는 예제 이름이 포함된 텍스트 파일뿐만 아니라 여러 tar.gz 파일이 있습니다.

Current_directory
      |_______TDF.tar.gz
      |_______DFG.tar.gz
      |_______GHY.tar.gz

현재 디렉터리의 names.txt 파일은 다음과 같습니다.

Tar.gz_filenames       Sample_Names
DFG.tar.gz                Sample2
TDF.tar.gz                Sample1
GHY.tar.gz                Sample3

따라서 일치 항목을 기반으로 Current_directory에서 다음 출력을 얻고 싶습니다.

Output:

Sample1.tar.gz
Sample2.tar.gz
Sample3.tar.gz

나는 성공하지 않고 다음을 시도했습니다.

for j in .tar.gz ; do
  sed "s/\(\w\+\)\s\+\(\w\+\)/mv '*_\1$j' '*_\2$j'/e" names.txt
done

내 질문에 대한 작은 업데이트: 이 명령을 사용하면 cat -e names.txt다음과 같은 내용이 표시됩니다.

Tar.gz_filenames    Sample_Names^M$
DFG.tar.gz  Sample2^M$
TDF.tar.gz  Sample1^M$
GHY.tar.gz  Sample3

답변1

파일 이름에 공백이 없다고 가정하는 또 다른 방법은 다음과 같습니다.

$ xargs -n2 echo mv -i <<<"$(sed '1d; s/$/.tar.gz/' names.txt)"
mv -i TDF.tar.gz Sample1.tar.gz
mv -i DFG.tar.gz Sample2.tar.gz
mv -i GHY.tar.gz Sample3.tar.gz

에서는 입력 파일 이름의 첫 번째 줄을 제거 sed '1d; s/$/.tar.gz/'하고 각 줄 끝에 (줄 끝에 ponits)를 추가합니다 .1dnames.txts/$/.tar.gz/.tar.gz$

xargs -n2공백/또는 탭으로 구분된 두 세트의 문자열을 읽고 있습니다 .

노트:

  • cat -e names.txt파일의 출력이 Unix 형식의 줄 끝 형식이 아니므로 Unix 형식으로 변환한 후 위 dos2unix fileName의 명령을 적용하여 이름을 변경합니다.

  • 테스트 실행을 위해 제거하세요 echo.

다음으로 연결그것은 무엇 ^M이며 어떻게 제거합니까?

답변2

names.txt표시된 대로 이름에 공백이 없고 파일의 첫 번째 줄에 제목이 있다고 가정하면 다음과 같이 할 수 있습니다.

tail -n +2 names.txt | while read old new; do
    mv -i "$old" "$new"
done 

두 번째 줄부터 시작하여 파일의 모든 줄을 인쇄하므로 tail -n +2헤더를 건너뜁니다. 그런 다음 -iGNU의 옵션은 mv기존 파일을 덮어쓰기 전에(이름이 충돌하는 경우) 프롬프트를 표시하도록 지시합니다.

답변3

셸 사용: tar 파일 이름에 공백이 포함되어 있지 않고 예제 이름에도 공백이 포함되어 있지 않다고 가정합니다.

{
    read header
    while read -r tarfile sample; do
        if [[ -f "$tarfile" ]]; then
            echo mv "$tarfile" "$sample.tar.gz"
        fi
    done
} < names.txt

답변4

입력 파일 형식을 고려하면 sed다음 명령 하나로 충분합니다.

sed '1!{s/^/mv /;s/$/.tar.gz/e}' names.txt

데모, 아니요 e:

sed '1!{s/^/mv /;s/$/.tar.gz/}' names.txt

산출:

Tar.gz_filenames       Sample_Names
mv TDF.tar.gz                Sample1.tar.gz
mv DFG.tar.gz                Sample2.tar.gz
mv GHY.tar.gz                Sample3.tar.gz

관련 정보