2012-07-03 3 views
0

해당 면접 질문. 면접자는 쉘 스크립팅에 대한 경험이 없다는 것을 이해할 때이 "기본적인"쉘 스크립트 질문을했습니다. 여기에 질문이 있습니다.특정 크기의 파일을 다른 디렉토리로 복사

크기가 500 K 이상인 디렉토리 하나에서 다른 디렉토리로 파일을 복사하십시오.

나는 c lang에서 즉시 할 수 있지만 쉘 스크립트에서는 결코 시도하지 않았기 때문에 어려울 것 같습니다. 유닉스 기본 명령에 익숙하기 때문에 시도했지만 다음 명령을 사용하여 파일 이름을 추출 할 수 있습니다.

du -sk * | awk '{ if ($1>500) print $2 }' 

또한 좋은 쉘 스크립트 예제를 알려드립니다.

+0

'du dir '대신'du *'를 사용하는 것 외에는 합리적인 해결책이지만'find'가 더 좋습니다. –

답변

3

du 아마도 원하지 않을 것입니다. (그 점이 모호한 경우 설명을 요청했을 수 있습니다). 크기를 얻으려면 ls -l 또는 ls -s을 사용해야 할 가능성이 큽니다.

하지만 일부 파일을 선택하고 이름을 인쇄하는 작업을 했으므로이를 기반으로 작업 해보십시오. 이름 목록을 출력하는 명령이 있습니다. 해당 명령의 출력을 cp의 명령 행에 넣어야합니다. 만약 당신의 뒤 | AWK 출력이 :

Makefile 
foo.c 
bar.h 

이 실행하려는 :

cp Makefile foo.c bar.h otherdirectory 

을 그래서 당신은 그 함께 어떻게 명령 치환이 같은 $(...)로 기록 :

cd firstdirectory 
cp $(du -sk * | awk '{ if ($1>500) print $2 }') otherdirectory 

그리고 그것은 작동하는 스크립트입니다. du | awk 명령이 먼저 실행되고 출력이 cp 명령을 작성하는 데 사용됩니다. 일반적인 사용에는 부적합한 미묘한 단점이 있지만 초급 수준의 셸 스크립트가 일반적으로 사용됩니다.

4

여러 가지 방법으로 수행 할 수 있습니다. 내가 찾아 시도하고 사용하십시오 :

find $FIRSTDIRECTORY -size +500k -exec cp "{\} $SECONDDIRECTORY \; 

는 -maxdepth 옵션을 사용하여 현재 디렉토리에 제한하려면.

0
find . -mindepth 1 -maxdepth 1 -type f -size +BYTESc -exec cp -t DESTDIR {}\+ 

크기의 접미사는 필수입니다. 크기는 바이트 단위입니다. 그렇지 않으면 -size 검사 결과를 결정할 때 예기치 않은 반올림 동작이 발생할 수 있습니다. 복사가 재귀 적으로 수행되는 경우 대상 디렉토리를 생성해야합니다.

관련 문제