2012-10-04 2 views
2

디렉토리의 파일을 다른 디렉토리로 이동해야합니다. 다음 프로그램을 사용할 때 stat 오류가 발생합니다.mv : 오류를 통계 할 수 없습니다 : 해당 파일 또는 디렉토리 오류가 없습니다.

for i in dir1/*.txt_dir; do 
mv $i/*.txt dir2/`basename $i`.txt 
done 

에 텍스트 파일 $i/에 없을 때이 작동하지 않습니다

mv: cannot stat `dir1/aa7.txt_dir/*.txt': No such file or directory 
+3

라는 이름의 모든 파일을 보여줍니다 것은 자명 보인다. 'dir1/aa7.txt_dir '에는'* .txt' 파일이 없습니다. –

답변

3
mv $i/*.txt dir2/`basename $i`.txt 

오류 메시지. 셸은 원시 문자열 "$i/*.txt"mv에 확장되지 않은 *과 함께 전달합니다. mv은 쵸크 스합니다. 이 같은

시도 뭔가 :

for i in dir1/*.txt_dir; do 
    find $i -name '*.txt' -exec mv {} dir2/`basename $i`.txt \; 
done 
+0

답변 해 주셔서 감사합니다. 사실 $ i /에 텍스트 파일이 있습니다. 그러나 여전히 같은 오류. – charlie

6

일반적으로는, 어떤 파일 이름과 일치하지 않는 글로브가 확장 될 때, 그것은 변경되지 않습니다. 우리가 nullglob 변수의 기본값을 변경해야 해당 파일이나 디렉토리

을이 문제를 방지하려면 :

$ RM은이 박 RM :` 박 '을 제거 할 수 없습니다 따라서,이 같은 결과를 얻을 수 .

#BASH 

    shopt -s nullglob 

    for i in dir1/*.txt_dir; do 
     mv $i/*.txt dir2/'basename $i'.txt 
    done 

여기에 대해 자세히 알아보기 :이 도움이 http://mywiki.wooledge.org/NullGlob

희망을!

-1

귀하의 예에서는 표시되지 않지만 정확한 인용문을 사용하는 것이 중요합니다. BASH의 "*"은 *로 평가되고 '*'는 확장 glob으로 평가됩니다. 그렇게

`ls *` 

디렉토리에있는 모든 파일을 보여줍니다 및

`ls "*"` 

는 문자 그대로 *

관련 문제