이 파일 이름을 변경하고 싶습니다.
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
-i
mv
파일을 덮어쓸지 묻는 메시지를 표시하려면 이 옵션을 추가하세요 . 필요한 파일을 덮어쓰지 않을 것이 확실하다면 해당 파일을 삭제하세요.
답변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
쉘은 해당 파일을 파일 목록으로 확장합니다. 그 중 어느 것도 디렉토리가 아니기를 바라므로 동일한 이유로 다시 실패합니다.
운이 좋으면 이런 식으로 데이터가 손실될 수 있습니다.