디렉토리의 파일 이름 바꾸기

디렉토리의 파일 이름 바꾸기

내 디렉토리에 다음과 같은 파일 이름이 있습니다

example1.1.timestamp(.1457644337)
example1.2.timestamp
example1.3.timestamp

약 100개의 파일을 기다립니다. .timestamp(.1457644337)끝을 제거하여 모든 파일의 이름을 바꿔야 합니다 .

단일 파일에 대해 이 작업을 수행했습니다.

ls -l filename | sed 's/\.[^.]*$//'

답변1

사용 rename( prename):

  • 모든 파일의 타임스탬프가 동일한 경우 파일이 포함된 디렉터리에서 다음을 수행할 수 있습니다.

    rename -n 's/\.1457644337$//' example1.*.*
    
  • 다른 타임스탬프의 경우:

    rename -n 's/\.\d+$//' example1.*.*
    

재귀적으로:

find . -type f -name 'example1.*.*' -exec rename -n 's/\.\d+$//' {} +

-n변경 사항에 만족하면 삭제(테스트 실행)하세요.

이렇게 하면 숫자(포함)가 포함된 마지막 부분이 제거됩니다 .. 따라서 타임스탬프 이외의 임의의 숫자가 있는 경우에도 제거됩니다.


쉘 매개변수 확장을 사용하십시오.

  • 모든 파일의 타임스탬프가 동일한 경우:

    for file in *.*; do mv -i "$file" "${file%.1457644337}"; done
    
  • 다른 타임스탬프의 경우 다음을 가정합니다 bash(다른 고급 쉘에도 비슷한 옵션이 있음).

    shopt -s extglob; for file in *.*; do mv -i "$file" "${file%.+([0-9])}"; done
    

재귀적으로:

find . -type f -name 'example1.*.*' -exec \
    bash -ic 'shopt -s extglob; mv -i "$1" "${1%.+([0-9])}"' _ {} \;

여기서는 쉘 옵션을 사용하여 extglob패턴을 사용하여 마지막 숫자 이후의 숫자를 일치시키므로 대체 매개변수 확장 패턴이 됩니다..+([0-9])${file%.+([0-9])}

다시 말하지만 이는 타임스탬프와 엄격하게 일치하지 않습니다. 정확한 시간 형식이 있는 경우 견고성을 위해 패턴을 수정할 수 있습니다.

답변2

육안 검사 명령을 사용하여 대화형으로 다음을 수행합니다.

ls | vim -

vim 내부:

:%s/.*/mv \0 \0/        ...move filename filename
:%s/\.[^.]*$//          ...same as your sed regex
:w !sh                  ...run buffer with shell
:q!                     ...close without saving

관련 정보