본문 바로가기

이거슨 상식!

명령어모음집

1. 현재 위치에서 파일의 개수 세기

ls -l |  wc -l

 

2. 현재 디렉토리의 하위 파일 개수 세기

find . -type f | wc -l

 

3. 하위폴더내 모든 특정 확장자 파일 이동

find . -name "*.jpg" -exec mv {} 경로 \;

 

4. 폴더내 리스트를 받아오려면?

dir 변수에 `ls ./directory`를 변수로하여 폴더내 폴더명 혹은 파일명들을 받아올수 있다.

for dir in `ls ./directory`

do

    ### do job here  

    echo $dir   

done

 

5. 실행한 명령어를 변수로 다시 받을려면?  -exec

find . -name *.png를 하면 png파일들이 찾아진다. 이 png파일들을 대상으로 어떤 명령을 실행시키고 싶을때,

find . -name *.png -exec mv {} ../../newpath \;

위 처럼 -exec를 사용하면 앞에 사용한 명령어를 변수로 받아올 수 있다. 

"{}" 애를 통해서, 괄호자리에 명령줄이 들어가게된다.  

결국 mv {find . -name *.png} ../../newpath  처럼 실행되는 것이다. 

명령 끝줄에 \; 를 꼭 적어줘라

 

ex2) myfile_11.jpg, myfile_12.jpg 등등 하위파일 싹다 찾아다가 삭제하기 

find . -name myfile_*.* -exec rm {} \;
 

 

 6. 파일명 일괄변경, rename으로 에러 뜰때, 

rename으로 할때 아래와 같이 할수 있는데, 파일 많으면 에러뜬다 (9만개 에러발생..!)

이럴땐 아래 접두사 추가하기 방법으로 진행한다.

find . -name '*.png' -exec rename 's/gt_//g' {} \;

 

 7.  폴더 내 하위 파일에서 특정 문자들을 제거하거나 치환할 경우   

find . -type f -name "*.json" -print0 | xargs -0 sed -e 's/\\uace0//g'

 

 8.1 파일명 앞에 접두사(prefix) 추가

for file in *.txt; do mv "$file" "yourPrefix$file"; done;

예를 들어 파일명 앞에 언더스코어 "_" 를 일괄로 추가하려면

"abc.txt"  -> "_abc.txt" ...

for f in *.txt; do mv "$f" "_$f"; done;

 

활용예시2

 for i in `cat ./filtered_list/train.txt`; do cp "./image/$i.png" "./tempimg/" ; done;

txt파일을 읽어, txt파일내 이미지 파일들에대해 cp작업을 수행한다. 

` 와 ' 에 유의하자

 

 

  8.2 접미사(suffix) 추가  

파일명 뒤에 언더스코어 "_" 를 일괄로 추가하려면

"abc.jpg"  -> "abc_.jpg" ...

for f in *.jpg; do mv -- "$f" "${f%.jpg}_.jpg"; done;

 

 

 

9. 확장자 변경

for f in *.예전확장자; do mv -- "$f" "${f%.예전확장자}.새확장자"; done;

예를 들어 html 확장자를 php로 변경하려면

"abc.html"  -> "abc.php"  ...

for f in *.html; do mv -- "$f" "${f%.html}.php"; done;

 

 10. 접두어 일괄 삭제

abc로 시작하는 파일명에서 abc를 제거하기

rename abc "" abc*

 

 

 11. 파일 내부 문자열 일괄 치환  sed    ! 

cat 001.json | sed -e 's/치환대상/치환목표/g' 

옵션 : -e  : 출력만 한다. / -i 원본에 반영한다.

따라서 -e로 테스트하고 -i로 반영할것 

 

[테스트할때]

cat 001.json | sed -e 's/ motor/motor/g' >> test.json 

cat 파일명 | sed -e 's/원본문자열/치환할문자열/g' >> test.json 

 

[원본에 저장할때]

sed -i 's/ motor/motor/g' 001.json 

sed -i 's/원본문자열/치환할문자열/g' 작업할파일

 

 

 

 

cut 사용

cut -d '.' -f0 

-d : delimiter , -f : delimiter뒤로 n번째

 

ex: cat train_pairs.txt | cut -d ' ' -f 1

공백 앞쪽 가져오기 

 

gpt가만들어준 문장

find /path/to -type f -name "*.txt" -exec sh -c 'base=${1%.*}; grep -q "^7 " "$1" && rm "$1" "${base}.jpg"' _ {} \;

 

 

txt 출력해서, 파일들 옮기기

cat truelist.txt | cut -d':' -f1 | while read filename; do mv "./image/${filename}.png" ./1; done

 

 

 ls train/2 | shuf | head -n 150000 | xargs -I {} mv train/2/{} train_temp  

 

shuf =shuffle