내 디렉토리에 다음과 같은 파일 이름이 있습니다
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