삭제 후 이름 바꾸기: 동일한 파일 이름 다른 확장자

삭제 후 이름 바꾸기: 동일한 파일 이름 다른 확장자

수천 개의 파일이 포함된 디렉토리가 있고 각 파일의 복사본이 있습니다. 한 가지 예:

file1.txt
file1.jpg.txt

file2.txt
file2.jpg.txt

모든 *.txt 파일을 삭제하고 *.jpg.txt를 유지한 다음 모든 *.jpg.txt의 이름을 *.txt로 바꾸고 싶습니다.

OpenSuse 12에서 실행 중입니다.

답변1

@roaima가 언급했듯이 먼저 파일을 삭제할 필요는 없으며 파일을 이동할 때 이전 파일을 자동으로 덮어쓰게 됩니다.

한 가지 방법은 bash에서 for 루프를 사용하는 것입니다.

for f in *.jpg.txt; do mv $f ${f/%.jpg.txt/.txt}; done

설명하겠습니다.

  • for f in *.jpg.txt; do <command>; done: 각 파일에 대해 명령을 실행합니다 *.jpg.txt. 파일 이름은 실행 중에 변수에 저장됩니다 f.
  • ${f/%.jpg.txt/.txt}: 의 값 $f이지만 마지막 항목 .jpg.txt은 로 대체됩니다 .txt. 바라보다https://www.tldp.org/LDP/abs/html/parameter-substitution.html이에 대해 자세히 알아보세요.
  • mv $f ${f/%.jpg.txt/.txt}: 이전 파일의 이름을 .jpg.

이 코드를 실행하기 전에 다음을 실행하여 코드가 올바르게 수행되는지 확인할 수 있습니다.

for f in *.jpg.txt; do echo $f ${f/%.jpg.txt/.txt}; done

그러면 이동할 파일 쌍이 인쇄됩니다.

답변2

#!/bin/bash

## to remove ".txt" files

# this will keep the files which removing in txt
# you can see delete file on the script path
ls -lrth | grep ".txt" | grep -v "jpg" | awk -F' ' {'print $9'} > delete
terminal=`tty`
exec < ${delete=delete}
        while read line
        do
                rm -rf $line
        done
exec < $terminal


## Renaming the files
# this will keep the files which we are renaming
# you can see rename file on the script path
ls -lrth | grep -i "jpg" | awk -F' ' {'print $9'} > rename 
terminal=`tty`
exec < ${rename=rename}
        while read line
        do
                nn=`echo $line | sed 's/.jpg//gi'`
                mv $line $nn
        done
exec < $terminal

관련 정보