[Linux] 셸 은 sed 를 이용 하여 파일 이름 을 대량으로 변경 하 는 방법 에 대한 자세 한 설명 | 정규 표현 식 을 사용 하지 않 고 알 수 없 는 파일 이름 을 수정 합 니 다 |
디 렉 터 리 A 는 자동 화 된 패키지 생 성 apk 파일 을 저장 하 는 데 사 용 됩 니 다. 현재 패키지 이름 의 명명 규칙 을 개 발 했 습 니 다: 환경 이름 (pro | uat) - release - 날짜 - v 버 전 번호. apk
원래 생각 은 정규 표현 식 을 통 해 새로운 가방 이름 과 일치 하 는 것 이 었 으 나 셸 스 크 립 트 에서 정규 표현 식 을 사용 하 는 것 을 발 견 했 습 니 다. 저 는 현재 정규 표현 식 이 shel 스 크 립 트 에서 유효 하 다 는 것 을 어떻게 검증 하 는 지 잘 모 르 겠 습 니 다.
만능 검색엔진 을 통 해 또 다른 방법 을 찾 았 다. 더 간단 하고 직접적 이다.
지정 한 디 렉 터 리 에 있 는 apk 이름 을 직접 가 져 오고 고정된 이름 으로 이름 을 바 꾸 면 제 가 사용 하기에 편리 합 니 다 (python 스 크 립 트 를 통 해 apk 를 민들레 에 업로드 합 니 다)
원본 파일 이름:
pro-release-20191220-v2.0.8.apk
[root@67 release]# ls
output.json pro-release-20191220-v2.0.8.apk test.sh
스 크 립 트 구현:
apk 로 끝 나 는 파일 이름 을 new NameStr 로 변경 합 니 다.
for file in `ls | grep .apk`
do
newfile='newNameStr'
mv $file $newfile
done
스 크 립 트 실행 효과:
[root@67 release]# sh test.sh
[root@67 release]# ls
newNameStr output.json test.sh
내용 확장:
머리말
본 고 는 주로 리 눅 스 셸 이 sed 로 파일 이름 을 대량으로 변경 하 는 것 에 관 한 내용 을 소개 하고 참고 학습 을 제공 합 니 다. 다음은 더 이상 말 하지 않 겠 습 니 다. 상세 한 소 개 를 해 보 겠 습 니 다.
예시
특정 문자 제거
대상: 2017 - 01 - 01. jpg, 2018 - 01 - 01. jpg 를 20170101. jpg, 20180101. jpg 로 변경
방법: 모든 - 비 워 두 기
?
1
2
3
4
5
for
file
in
`
ls
|
grep
.jpg`
do
newfile=`
echo
$
file
|
sed
's/-//g'
`
mv
$
file
$newfile
done
표준 출력 문자열 을 sed 로 바 꿉 니 다. 일반적인 형식 은 다음 과 같 습 니 다.
?
1
stdout |
sed
's/pattern/replace/'
위 예제 에 서 는 첫 번 째 일치 항목 만 바 꾸 는 것 이 아니 라 마지막 에 g 를 추가 합 니 다.
중간 삽입 문자
대상: book 01. txt, paper 02. txt 를 book - 01. txt, paper - 02. txt 로 변경
방법: 삽입 할 위치 양쪽 에 있 는 문자열 을 그룹 으로 나 누 어 가 져 온 다음 역방향 참조 로 교체 합 니 다.
?
1
2
3
4
5
for
file
in
`
ls
|
grep
.txt`
do
newfile=`
echo
$
file
|
sed
's/\([a-z]\+\)\([0-9]\+\)/\1-\2/'
`
mv
$
file
$newfile
done
분석 하 다.
위 예제 에 서 는 먼저 ls 와 grep 명령 을 통 해 이름 을 바 꿀 파일 목록 을 얻 은 다음 sed 명령 으로 문자열 을 바 꾸 고 마지막 으로 뮤 직 비디오 명령 을 사용 하여 파일 이름 변경 을 완성 합 니 다.
이름 을 바 꿀 파일 목록 을 가 져 오 는 방법 은 여러 가지 가 있 습 니 다. find 명령 을 통 해 문자열 을 직접 보 낼 수도 있 습 니 다. 다음 글 에서 언급 하 겠 습 니 다.
다음
ls | grep .txt
이 명령 은 두 개의 작은 따옴표 로 묶 었 다. $(ls | grep .txt)
역할 이 같 습 니 다. 포 위 된 문자열 은 명령 으로 실 행 된 다음 문자열 결 과 를 되 돌려 줍 니 다.파일 이름 에 빈 칸 을 포함 하 는 해결 방법
명령 을 통 해 얻 는 것 이 아니 라 파일 목록 을 for 순환 에 직접 쓸 수 있 습 니 다. 예 를 들 어:
?
1
2
3
4
for
file
in
"file1 file2 file3"
do
...
done
for 순환 은 빈 칸 을 통 해 문자열 을 분할 하 는 것 을 볼 수 있 습 니 다. 따라서 변경 할 파일 이름 에 빈 칸 이 포함 되 어 있 으 면 여러 파일 이름 으로 나 누 어 져 오류 가 발생 합 니 다.
이 문 제 를 해결 하려 면 IFS (내부 필드 구분자) 를 줄 바 꿈 문자 로 설정 할 수 있 습 니 다. 그러면 for 순환 은 줄 에 따라 변수의 값 을 가 져 와 서 매번 가 져 오 는 것 이 완전한 파일 이름 인지 확인 할 수 있 습 니 다.
IFS 변 수 를 설정 하 는 명령 은 for 순환 전에 두 어야 합 니 다.
?
1
2
3
4
5
IFS=$
'
'
for
file
in
`
ls
`
do
...
done
while read 명령 을 사용 하여 변수 file 에 한 줄 씩 읽 을 수도 있 습 니 다.
?
1
2
3
4
ls
|
grep
"*.txt"
|
while
read
file
do
...
done
find 로 파일 목록 가 져 오기
이전 예제 에서 우 리 는 ls 명령 을 통 해 파일 목록 을 가 져 왔 습 니 다.이 명령 은 디 렉 터 리 의 파일 만 가 져 올 수 있 고 여러 조건 으로 선별 할 수 없습니다.
파일 찾기 하면 기능 이 강 한 find 명령 을 언급 하지 않 을 수 없다.이 명령 은 여러 차원 의 디 렉 터 리 에서 파일 을 찾 을 수 있 으 며, 생 성 시간, 파일 크기, 소유자 등 다양한 조건 을 설정 하여 파일 을 찾 는 것 이 매우 편리 하고 유연 합 니 다.
find 명령 으로 파일 목록 을 가 져 오고 sed 명령 으로 정규 표현 식 에 맞 춰 파일 이름 을 수정 합 니 다. 이 두 명령 의 결합 은 거의 모든 일반적인 일괄 이름 변경 작업 을 수행 할 수 있 습 니 다.
예 를 들 어 1M 이상 이 고 txt 또는 jpg 로 접 두 사 를 붙 인 파일 은 book 과 같 습 니 다.20170101.txt、image_20170101. jpg 의 파일 이름 은 20170101 - book. txt, 20170101 - image. jpg 로 바 뀌 었 습 니 다. 코드 는 다음 과 같 습 니 다.
?
1
2
3
4
5
for
file
in
`
find
. -size +1M -name
"*_*.txt"
-o -name
"*_*.jpg"
`
do
newfile=`
echo
$
file
|
sed
's/\([a-z]\+\)_\([0-9]\+\)./\2-\1./'
`
mv
$
file
$newfile
done
find 명령 에 대한 더 많은 용법 은 참고 할 수 있 습 니 다. //www.jb51.net/article/108198.htm
참고 문서:
Linux 셸 은 sed 를 이용 하여 파일 이름 을 대량으로 변경 하 는 방법 에 대한 자세 한 설명
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.