.cpp
로 끝나는 모든 파일을 찾아 이름을 바꾸는 스크립트를 작성하고 싶습니다 .cc
. 검색은 스크립트의 인수인 시작 경로 R에서 재귀적으로 수행됩니다.
인수가 작성되지 않으면 R이 실제 디렉토리가 됩니다.
그리고 나는 다음과 같이 썼습니다:
#!/bin/bash
R=.
if [[ $# == 1 ]]
then
echo "$# == 1"
if [[ -d $1 ]]
echo "$1 is directory"
then
R=$1
else
printf "Error $1 should be a directory"
exit 1
fi
find $R -name "*.cpp" -exec sh -c 'mv {} $(dirname {})${$(basename {})%.cpp}".cc" ' \;
exit 0
else
printf "Invocation is: $0 directory"
exit 1
fi
하지만 표현하는 방법을 모르기 때문에 찾기 줄에 문제가 있다는 것을 알고 있습니다.{}를 사용할 때 확장자를 삭제하고 새 확장자를 추가하고 싶습니다.
답변1
에서 직접 조작하여 그런 일을 하지 마십시오 {}
.
inline 을 사용했으므로 인수로 sh
전달 하고 전혀 {}
사용할 필요도 없습니다 .basename
find "$R" -name "*.cpp" -type f -exec sh -c '
for f do
mv -- "$f" "${f%.*}.cc"
done
' sh {} +
를 큰따옴표로 묶어야 합니다 $R
. 그렇지 않으면보안이 취약해질 수 있습니다.