백업하고 싶은 컴파일된 C 프로그램이 많이 포함된 디렉토리가 있습니다. 지금은 이름이 지정되어 있지만 program.out
이를 그냥 으로 변경하고 싶습니다 program
.
이런 것들을 제외하는 것이 여전히 가능할까요? 또한 모든 이름을 빠르게 바꾸려면 어떤 종류의 정규식을 사용해야 합니까?
답변1
코드를 백업하려면 git 또는 기타 버전 제어 소프트웨어를 사용하세요. 인터넷에서는 github, bitbucket 등 다양한 이름을 선택할 수 있습니다.
git에서 *.out을 추가하면 .gitignore 파일이 있고 저장소로 전송되지 않습니다.
답변2
첫 번째 질문에 대해서는 명확하지 않습니다. program.out
이름을 바꾸려면 program
다음을 실행하십시오.
mv program{.out,}
/etc
두 번째 질문에서는 접미사가 붙은 파일 목록을 얻고 싶다고 가정합니다 .
#!/bin/bash
ls /etc > /tmp/etcfiles
while read line
do
if [[ $line =~ \..+ ]]; then
echo $line
fi
done < /tmp/etcfiles
필요에 따라 위의 내용을 조정할 수 있습니다.
\.
리터럴 마침표와 일치합니다..
마침표 뒤의 모든 문자와 일치합니다.+
첫 번째 마침표 뒤에는 하나 이상의 문자가 있어야 함을 의미합니다. 따라서 이것은 일치test.c
하지만test.
일치하지 않으려면 을 a 로test.
변경하십시오 .+
*
답변3
bash를 셸로 사용하는 경우 이는 셸 파이프라인에 대한 간단한 작업입니다.
ls | grep '\.out$' | while read file; do echo mv "$file" "${file%.*}"; done
ls
디렉토리에 파일 목록을 생성합니다.
grep '\.out$'
.out으로 끝나는 파일 이름을 추출하고 나머지는 삭제합니다.
while read file
파일 이름을 한 번에 하나씩 읽습니다.
echo mv "$file" "${file%.*}"
각 파일의 이름을 확장자가 없는 버전으로 바꾸는 mv 명령을 표시하지만 실행하지는 않습니다. 비즈니스 ${file%.*}
는 파일 확장자를 제거하기 위한 bash 구문입니다. 실제 실행 시 파이프라인이 원하는 작업을 수행할 것이라는 확신이 들면 해당 echo
부분을 제거하고 실제로 실행되도록 하세요.
ls | grep '\.out$' | while read file; do mv "$file" "${file%.*}"; done