새소식

반응형
IT skill/Linux

파일이 너무 많을 때 Argument list too long 에러 해결법

  • -
반응형

폴더안에 들어있는 데이터가 너무 많으면 ls 명령어 입력시에 리스팅을 다 하기 어렵기 때문에 Argument list too long 이라고만 말한다.

 

그래서 응용방법으로 ls *.jpg 이런식으로 조건검색을 해 볼 것이고, 이런 방법도 먹히지 않는다.

 

cp, mv 등등 모두 동작하지 않는다.

 

리눅스를 low-level 까지 잘 사용하진 못하지만 이런 방법이 있었다.

 

find 파일을_찾을_위치 -type f |grep 찾을파일형식 | awk ‘{print “cp -r “$1” ./}’ | bash

# example
find ./ -type f |grep *.jpg | awk '{print "cp -r "$1" ./}' | bash

 

example을 자세히 풀어보자.

 

find ./ -type f |grep *.jpg >> 이 명령어는 jpg 확장자의 파일 형태를 현재경로에서 찾는다는 명령어이다.

 

이 명령어만 입력하면 찾아낸 파일들을 쭉 리스팅 할 것이다.

 

이제 awk를 보자.

 

$1은 find ./ -type f |grep *.jpg 명령어를 치면 만약 이렇게 출력이 된다고 가정해보자.

123.jpg
124.jpg
125.jpg

 

그러면 $1은 첫 명령어에서는 123.jpg, 두 번째 명령어에서는 124.jpg ...가 된다.

 

예를 들어서, 

 

'{print "cp -r "$1" ./}' 이렇게 입력했다고 하면

 

첫 번째 명령 수행은

cp -r 123.jpg ./

 

두 번째 명령 수행은

cp -r 124.jpg ./

 

이렇게 실행된다.

 

print는 awk의 "action"에 해당하는 동작으로 명령을 프린트해준다. https://recipes4dev.tistory.com/171

 

리눅스 awk 명령어 사용법. (Linux awk command) - 리눅스 파일 텍스트 데이터 검사, 조작, 출력.

1. awk 명령어. 대부분의 리눅스 명령들이, 그 명령의 이름만으로 대략적인 기능이 예상되는 것과 다르게, awk 명령은 이름에 그 기능을 의미하는 단어나 약어가 포함되어 있지 않습니다. awk는 최

recipes4dev.tistory.com

 

마지막으로 | bash는 bash로 실행하겠다는 뜻이다.

 

 

결론은 

find ./ -type f |grep *.jpg | awk '{print "cp -r "$1" ./}' | bash

이런식으로 awk와 find를 응용하면 리스트가 너무 많을 때 하고 싶은 동작을 실행할 수 있다.

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감과 광고 클릭 부탁드립니다~