일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- HookNet
- 프로그래머스
- vscode
- docker attach
- 오블완
- 사회조사분석사2급
- docker
- airflow
- WSSS
- 도커
- Decision Boundary
- 티스토리챌린지
- AIFFEL
- Jupyter notebook
- Pull Request
- Multi-Resolution Networks for Semantic Segmentation in Whole Slide Images
- docker exec
- ssh
- logistic regression
- cocre
- cs231n
- aiffel exploration
- 기초확률론
- CellPin
- 히비스서커스
- GIT
- numpy
- IVI
- 코크리
- 백신후원
Archives
- Today
- Total
히비스서커스의 블로그
[Linux] 여러 파일들 특징에 맞는 여러 디렉토리에 옮기는 shell script 작성방법 (feat. 8: Bad substitution) 본문
Programming/Linux
[Linux] 여러 파일들 특징에 맞는 여러 디렉토리에 옮기는 shell script 작성방법 (feat. 8: Bad substitution)
HibisCircus 2022. 3. 21. 17:18728x90
디렉토리 구조
~/
├ test_001.csv # 첫번째 csv 파일
.
.
.
├ test_100.csv # 100번째 csv 파일
├ 001 # 1번째 디렉토리
.
.
.
└ 100 # 100번째 디렉토리
목표
test_001.csv는 001에, test_100.csv는 100에 옮기는 것이 목표이다.
해결방법
1) 해당 코드가 적힐 스크립트 파일 만들기
$ vi mv_csv.sh
2) 코드 작성
#!/bin/bash
### 공통된 path부분을 test_dir로 할 것임
test_dir=~
### 해당 path에 모든 csv 파일들의 경로를 하나씩 불러와서 (ex. ~/test_001.csv)
for test in $test_dir/*.csv
### 하나의 경로에서 7번째부터 3글자를 불러옴 (ex. sudo mv ~/test_001.csv ~/001)
do
sudo mv $test ~/"${test:7:3}"
done
3) 스크립트 실행
$ sh mv_csv.sh
bonus 1) 뒤에서 부터 출력 시
### 코드
$ string=test_back
$ echo "${string: -4:4}"
### 결과
back
: 뒤에 한칸을 띄어야 하는 것이 포인트이다.
bonus 2) 문자의 길이 출력
### 코드
$ string=four
$ echo ${#string}
### 결과
4
문제 발생
8: Bad substitution
원인을 찾아보니 mv_csv.sh의 실행권한이 없어서였다.
해결방법
$ sudo chmod +x mv_csv.sh
bonus +) 해결이 안될 시
shell 언어가 sh가 아닌 다른 shell일 수 있으므로 체크해본 후
### 코드
$ readlink -f $(which sh)
### 결과
/bin/dash
bash 명령어로 파일을 실행해 보자.
$ bash mv_csv.sh
잘 해결되었다. ^^
-히비스서커스-
2022.03.29 뒤에서 부터 출력 및 문자열 길이 출력, 다른 해결방법 추가
728x90