2013-08-12 3 views
-1

그래서 나는 수많은 파리에서 stat를 호출하여 결과를 텍스트 파일로 출력해야합니다. 나는이여러 파일에 stat 호출하기 - 리눅스

stat 'Dir/$file_names' -c %n,%s,%y >> meta.txt 

$의 file_name은 형식에 시도했다 :

"file1" "file2" "file3" 

그러나 합계가 호출 될 때 따옴표가 경로에 남아대로 작동하지 않습니다.

문자열을 제거하거나 문자열을 반복 할 수있는 방법이 있습니까? 변수가 확장 될 수 있도록

또한 파일 이름의 일부는 그래서 따옴표 아마

파일 이름 문자열은 다음 명령으로 설정 파일을 지정하기 위해 필요한 것이다 공간

file_name=`ssh [email protected] find /attachments -type f -mtime -100 -daystart -printf '\"%f\"\ ' ` 
+0

당신의 질문은'stat'와 관련된 것보다 더 쉘 스크립트 질문입니다. 따라서 [advanced bash scripting guide] (http://www.tldp.org/LDP/abs/html/) –

+0

을 읽으십시오. "$ file_names"가 정확히 "* file *"형식을 사용하고 있다는 것을 의미합니까? file2 ""file3 "'"? 어떻게 * 정확하게'file_names' 쉘 변수가 설정 되었습니까? –

+0

그것은 find 명령을 사용하여 설정 한 문자열입니다. – Jessica

답변

1

위해이 따옴표 사용 $file_names 여러 파일 이름이 포함 된 경우

 
stat "Dir/$file_names" -c %n,%s,%y >> meta.txt 

을, 당신은 루프를 사용하는 방법의 t에서 변수를 포맷 할 수 있습니다 모자는 구분 기호를 사용합니다.

"file1" "file2" "file3"

사용이 대신 : 예를 들어, 당신이 그렇게하는 대신, 파일 이름을 구분하는 :를 사용할 수는 "내부 구분 기호"라고 (

file1:file2:file3

그리고 다음 IFS 특수 변수를 설정하고 :에) 쉘에 의해 인정 루프를 사용한다 : 당신은 그냥 자장하게 필요한 경우

 
IFS=":" 
for f in $file_names 
do 
    stat "Dir/$f" -c %n,%s,%y >> meta.txt 
done 

이 또한 한 줄 수 있습니다 전자 명령

 
IFS=":"; for f in $file_names; do stat "Dir/$f" -c %n,%s,%y >> meta.txt; done 

이 그 모든 것을 보장합니다 귀하의 파일 이름이 같은 공백이 포함 된 경우에도 제대로 작동 : 아마도

for f in $file_names ; do 
    stat Dir/$f -c %n,%s,%y >> meta.txt 
done 

을 시도

file1:file with spaces:even more spaces
+0

아마도 쉘은 첫 번째 인수를'Dir/file1 file2 file3'하지만 OP는'Dir/file1 Dir/file2 Dir/file3'을 원합니다. ... –

+0

@BasileStarynkevitch 제 실수. 파일 이름이 하나만 있다고 생각했습니다. for 루프는 그것을 해결합니다. –

+0

file_names에'a, b, c'가 포함되어 있다면'eval stat Dir/{$ {file_names}}'로 작업 할 수 있습니다. –

0

그러나 이것은 당신이 무엇을하지 않을 수도 있습니다 공백이있는 파일 이름을 처리하려는 경우 (필자는 피하기 위해 노력합니다).

advanced bash scripting guide을 읽으십시오.

관련 문제