쉘 스크립트 질문.
글쓴이: ddoman / 작성시간: 월, 2003/08/25 - 6:06오후
파일이름을 얻어오는 스크립트를 짜고있습니다.
find -type f -ls | awk '{ print $8_$9_$10 $11 }'
이렇게 하니깐 현재디렉토리 하위에 있는 파일이름과 시간이 쭉 나오더라구요.
awk에서 $8 $9 $10은 파일의 최근 변경시간이고, $11번째가 마지막필드인
파일이름입니다.
공백을 기준으로 구분했을경우 11번째 필드가 파일이름이 전부 출력됐지만
한글이나 특수 문자가 들어가는 경우 파일이름에 공백같은게 들어가서
이름이 짤리는 현상이 나타납니다만 명령어 사용법을 잘 몰라서
헤메고있습니다.
$11같이 파일이름은 무조건 $11번째 필드이다 가 아닌 파일이름은 $11번째부터
끝까지 필드이다..라던지..
기타 다른 유틸을 써서( sed, cut 등등 ) 표현할수있는 방법을 알고싶습니다.
Forums:
find -type f -ls | awk '{ print $8_$9_$1
find -type f -ls | awk '{ print $8_$9_$10 $11 }'
->
find -type f -ls |sed -e 's/\\ /_/g'| awk '{ print $8 , $9 , $10 , $11 }'
이정도로 고쳐주면.. 공백대신 밑줄 문자로 대체는 가능하겠네요 ^.^
find -type f -ls | awk '{ printf("%s %s
find -type f -ls | awk '{ printf("%s %s %s ", $8,$9,$10); for (i=11; i<=NF; i++) printf("%s ",$(i)); print "" }'
8,9,10번 필드는 무조건 출력한 후, 11번부터는 NF(필드개수)까지 출력하고 마지막에 개행해 주면 되겠네요.
-----
http://monpetit.posterous.com/
http://monpetit.tistory.com/
read를 사용하세요.
이경우에는 read를 사용하시면 보다 쉽게하실 수 있습니다.
find -type f -ls | while read inode blocknum perm drivenum owner group size mon day year file; do echo "$file"; done
'do'이하 'done' 이전까지 하고자 하시는 일을 기술하시면 됩니다.
(여기서는 파일명을 출력하는걸로 해놨지만..)
read의 특성상 문자열을 IFS를 기준으로 나누어 read 이하에
나오는 각각의 변수명의 변수에 순서대로 할당한뒤 마지막 변수명에 나머지
모두의 문자열을 집어 넣기때문에 이런 방법이 가능합니다.
추가적으로 여러가지 파일의 속성이 변수로 들어가니 필요하신 일을 하는데
충분할것으로 생각됩니다.
그럼...
추신) 제 시스템의 경우 파일의 timestamp가 월, 일, 년순으로 나와 위와같이
했지만 이건 시스템마다 설정에 따라 틀리니 맞춰 주셔야겠죠? :wink:
댓글 달기