파일의 품질 mv 및 파일 이름 변경

파일의 품질 mv 및 파일 이름 변경

이 파일 이름을 변경하고 싶습니다.

download (19).download
...
download (27).download

도착하다

download (19).html
...
download (27).html

나는 달리기에 실패했다

mv *.download *.html
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory

파일 이름을 변경하는 방법은 무엇입니까? 정규식이 필요할 수도 있다고 생각합니다.

답변1

mv호출 시 여러 파일을 단일 디렉터리로 이동하는 데 에만 이 기능을 사용할 수 있습니다 . 여기서 한 가지 옵션은 다음을 사용하는 것입니다 prename( rename대부분의 시스템에서 이에 대한 링크이지만 전부는 아님).

prename -n 's/download$/html/' -- *.download

-n이것이 요구 사항을 충족한다고 확신하면 제거하십시오. 또 다른 방법은 단순히 루프를 사용하는 것입니다.

for file in *.download; do
  mv -i -- "$file" "${file%download}html"
done

-imv파일을 덮어쓸지 묻는 메시지를 표시하려면 이 옵션을 추가하세요 . 필요한 파일을 덮어쓰지 않을 것이 확실하다면 해당 파일을 삭제하세요.

답변2

mv이것은 작동하지 않습니다. rename또는 와 같은 다른 도구가 필요합니다 mmv. 에는 두 가지 버전이 있습니다 rename.

물론 쉘은 다음을 사용하여 이를 수행할 수 있습니다 mv.

for file in *.download; do
  fbasename="${file%.download}"
  if [ -e "${fbasename}.html" ]; then
    echo "${fbasename}.html exists; skipping."
    echo "${fbasename}.html exists; skipping." >>rename.log
    continue
  else
    echo mv -- "$file" "${fbasename}.html"
  fi
done

테스트 후 삭제하세요 echo.

방법 mmv:

mmv -n '*.download' '#1.html'

-n실행을 차단하고 수행할 작업을 보여줍니다.

답변3

rename 's/download$/html/' *.download당신에게 어울릴 것입니다

답변4

zsh사용 가능한 쉘이 있는 경우 zmv원하는 것을 거의 정확하게 수행할 수 있으며 구문은 매우 유사합니다.

zmv '*.download' '$1.html'

귀하의 시도가 왜 잘못되고 위험한지 지적하기 위해: 와일드카드 *?는 쉘에 의해 확장됩니다.앞으로명령이 호출되기도 합니다. 따라서 mv실제로 수신되는 것은 대신 파일의 전체 목록이지만 *.download동작 *.html하는 방법에는 두 가지가 있습니다(둘 다 나쁨).

별표가 없으면 *.html쉘은 파일 이름의 일부로 별표를 유지합니다. 모든 다운로드를 이름이 같은 파일로 이동하려고 합니다 *.html. mv디렉터리가 아니라는 점을 경고합니다(그렇지 않으면 이 파일을 여러 번 덮어쓰게 되어 마지막으로 *.html다운로드한 파일이 포함되게 됩니다). 하나 이상의 파일이 실제로 발견 되면 *.html쉘은 해당 파일을 파일 목록으로 확장합니다. 그 중 어느 것도 디렉토리가 아니기를 바라므로 동일한 이유로 다시 실패합니다.

운이 좋으면 이런 식으로 데이터가 손실될 수 있습니다.

관련 정보