2011-03-13 3 views
1

다음 명령을 사용하여 출력을 다른 파일로 리디렉션하고 있습니다.파일이 존재하는 경우 셸에서 다른 파일로 출력 리디렉션

ls -l >>foo.txt 

이 명령은 ls -l의 결과를 foo.txt에 추가합니다. 파일이 존재하지 않으면 새 파일 foo.txt를 만들고 출력을 새 foo.txt로 리디렉션합니다.

이제 파일로 ls -l의 출력을 추가/리디렉션 할 수있는 방법이 존재하는 경우와 파일이 이미 존재하고, 그렇지 않으면 리디렉션되지 않습니다 출력 또는을 폐기 할 경우에만 가능합니다.

필자의 경우 foo.txt가 이미 존재하면 출력을 foo.txt에 추가합니다. 그렇지 않으면 출력을 무시합니다.

이 작업을 수행 할 수있는 명령이 있습니까? 작업이 원자 아니라고

if [ -f foo.txt ] ; then 
    out=foo.txt 
else 
    out=/dev/null 
fi 
ls -l >> $out 

답변

3

테스트 foo.txt이 존재하고 ls -l >> foo.txt 명령을 실행하기 전에 일반 파일 인 경우 :

test -f foo.txt && ls -l >> foo.txt 
3

는 내장 된 구문을 수행하는 있지만 다음과 같이 작동합니다 몰라 그 후 파일을 해제 할 수 있습니다 그것의 존재가 확인되고 쓰기 전에 열린다.

4
ls -l | 
    if [ -f "$file" ] 
     then cat >> "$file" 
     else cat # or whatever you want to do with the output 
    fi 

참고 :

+1

+1 자성을 언급위한 ... 그리고 "그" "그건"과의 적절한 사용을 위해! –