파일 이름의 처음 4자를 제거하십시오.

파일 이름의 처음 4자를 제거하십시오.

12xy[..].log다음과 같은 문제가 있습니다. 파일 이름을 to 형식으로 바꾸고 싶습니다 [...].log.

내 문제는 그들 중 일부는 a처음에 우려 사항이 있고 일부는 그렇지 않다는 것 v입니다. 따라서 이름의 일부를 특정 문자로 바꾸는 논리를 따르는 명령을 사용할 수 없습니다. (밑줄 등)

빠르게 이름을 바꿀 수 있는 방법이 있나요?

편집: 항상 동일한 접두사를 사용하십시오 MD18. 예를 들어, 이름이 지정된 파일이 있거나 MD18v230_SHAPE.log이름이 다른 파일 MD18a004_FACES.log등이 있습니다. 나는 그들 v230_SHAPE.log에게 이름을 붙이고 싶습니다 a004_FACES.log.

답변1

일괄 이름 바꾸기용으로 설계된 도구를 사용하겠습니다. 왜냐하면 이 도구는 작업을 수행하기 전에 온전한지 확인하는 데 능숙하거나 실제로 실행하지 않고도 수행할 작업을 보여줄 수 있는 시험 실행 모드를 제공하기 때문입니다.

그 중 몇 가지가 있는데, 가장 인기 있는 것은 Perl의 입니다. rename이것은 80년대부터 존재해 왔지만 perl여전히 더 발전된 것(및 여러 변형)으로 발전한 매우 짧은 예제 스크립트입니다. 이를 perl통해 문자열 처리 기능의 모든 기능을 사용할 수 있으므로 가능성은 무한합니다.

rename관련이 없지만 매우 제한된 명령도 패키지에서 호출됩니다 util-linux.

mmv이는 역시 1980년대부터 사용된 일괄 이름 바꾸기 전용 도구입니다. 한때 인기가 많았으나 최근에는 유행이 사라진 것 같습니다.

zsh자동 로딩 기능이 제공되어 zmvzsh 파일 이름 생성 및 확장 연산자의 모든 기능에 액세스할 수 있습니다.

여기서 작업은 비교적 간단합니다. 로 시작하는 파일의 처음 4개 문자만 제거하면 됩니다 MD18. 따라서 다음과 같습니다.

rename 's/^MD18//' MD18*.log
mmv 'MD18*.log' '#1.log'
autoload zmv
zmv 'MD18(*.log)' '$1'

다음과 같이 더 간단한 셸에서 언제든지 루프를 사용할 수도 있습니다 bash.

for file in MD18*.log; do
  mv -i "$file" "${file#MD18}"
done

그러나 특별한 도구로는 이를 보장할 수 없습니다. 여기서는 -i파일 손실/덮어쓰기 과정에서 사용자에게 중단할 수 있는 기회를 제공하기 위해 여전히 Albeit를 사용합니다. 명령을 앞에 추가하여 테스트 실행을 수행할 수도 있습니다 echo.

답변2

이러한 파일 이름은 모두 12xy로 시작합니까, 아니면 파일 이름의 처음 4자를 제거하시겠습니까? 모든 파일 이름이 12xy_lmn.log, 12xydef.log, 12xyabc.log, 12xyvw.log, ...와 같습니까?

그렇다면 for 루프를 사용하여 이름을 바꿀 수 있습니다.

for fn in ./12xy*.log 
do
    mv -i "$fn" "$(sed -e 's/^12xy//' <<< "$fn")"
done

충돌을 허용할 수 있으면 "mv -i"를 "mv"로 변경할 수 있습니다.

그러나 파일 이름에서 처음 4자를 제거하려면 내용에 관계없이 다음을 사용하십시오.

for fn in ./*.log 
do
    mv -i "$fn" "$(sed -e 's/^....//' <<< "$fn")"
done

답변3

for file in /path/to/MD18*.log; do
    name=$(echo "$file" | sed -E 's/.{4}(.*)/\1/')
    mv "$file" "$name"
done

이렇게 하면 처음 4자가 삭제됩니다.

관련 정보