디렉토리에 있는 모든 파일의 확장자를 어떻게 변경합니까?

디렉토리에 있는 모든 파일의 확장자를 어떻게 변경합니까?

저는 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명령이 실패할 경우 스크립트가 종료되어 상황이 예상한 대로 나오지 않을 경우 약간의 보호 기능을 제공합니다.mvcd

표현은 이름에 마침표가 없는 것과 같습니다 ${f%.*}. $f그렇지 않으면 마침표(마지막 마침표)와 그 뒤의 모든 내용이 제거됩니다.

관련 정보