![디렉토리에 있는 모든 파일의 확장자를 어떻게 변경합니까?](https://linux55.com/image/13947/%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EC%97%90%20%EC%9E%88%EB%8A%94%20%EB%AA%A8%EB%93%A0%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%ED%99%95%EC%9E%A5%EC%9E%90%EB%A5%BC%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EB%B3%80%EA%B2%BD%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
저는 Linux를 사용하고 있으며 두 개의 디렉터리를 사용하여 두 번째 디렉터리를 첫 번째 디렉터리로 이동하고(두 번째 디렉터리는 첫 번째 디렉터리의 하위 디렉터리가 됨) 두 번째 디렉터리의 모든 파일은 " .txt"가 확장됩니다. 예: 다음을 dir2
포함합니다.
file1
file2
dir3
file3.jmp
달리고 ./shell_scrip dir1 dir2
나면dir1
포함하다 dir2
다음과 같습니다 dir2
.
file1.txt
file2.txt
dir3
file3.txt
확장자를 변경하려고 했으나 다음과 같은 오류가 발생했습니다.
mv: cannot stat `file1`: No such file or directory
다음 코드를 사용하세요.
#!/bin/sh
for file in $2/*;
do
f=$(basename "$file")
mv "$f" "${f}.txt"
done
답변1
dir2를 이동하거나 참조하지 않았습니다. 다음과 같이 시도해 보세요.
#!/bin/sh
mv "$2" "$1" || exit # Make $2 a subdirectory of $1
cd "$1/$(basename "$2")" || exit # Change directories for simplicity
for f in *; do
mv "$f" "${f%.*}.txt" # Add or change the extension
done
및 명령 뒤에 추가하면 || exit
명령이 실패할 경우 스크립트가 종료되어 상황이 예상한 대로 나오지 않을 경우 약간의 보호 기능을 제공합니다.mv
cd
표현은 이름에 마침표가 없는 것과 같습니다 ${f%.*}
. $f
그렇지 않으면 마침표(마지막 마침표)와 그 뒤의 모든 내용이 제거됩니다.