AIX의 ls 명령에서 date format 문제...
리눅스에서 특정시간대에 업데이트 된 파일을 찾아서 처리하기 위해서
ls 명령어의 옵션 중 --full-time과 --time=ctime을 이용해서 Sort 된 결과를 사용했는데
AIX에서 실행을 시키려고 보니까 이곳에는 ls 명령에 이와같은 옵션이 존재하지 않는군요... ㅠㅠ
UNIX에서 처럼 시분까지만 출력되어서는 대상파일의 검색이 불가능하고
월도 영문이라 정렬이 의미가 없고, 일정기간이 지나면 일자 출력포맷도 바뀌는 등
일반적인 AIX의 ls 출력결과로는 리눅스에서 작업한 소스코드를 사용할 수 없는 상황입니다.
리눅스에서 처럼 파일 목록을 출력할 수 있는 방법이 없을까요??
리눅스 처럼 microsecond는 아닐지라도
프로그램에서 처리할 수 있게 yyyy-mm-dd hh:mi:ss 정도의 포맷으로 출력되었으면 좋겠습니다.
고수님들 의견 부탁드립니다.
리눅스 출력결과:
AWS01:/app/wdrac/src> ls -ltr --full-time --time=ctime
합계 224
-rw-r--r-- 1 wdrac was 2016 2013-01-15 08:56:59.015625000 +0900 trimStr.c
-rw-r--r-- 1 wdrac was 2642 2013-01-15 08:56:59.171875000 +0900 trimStr2.c
-rw-r--r-- 1 wdrac was 1512 2013-01-15 08:56:59.296875000 +0900 trimStr3.c
-rw-r--r-- 1 wdrac was 2045 2013-02-19 10:13:28.812500000 +0900 trimspace.c
-rwxr-xr-x 1 wdrac was 52447 2013-02-19 10:14:32.859375000 +0900 trimStr3.exe
-rwxr-xr-x 1 wdrac was 51935 2013-02-19 10:14:32.859375000 +0900 trimStr2.exe
-rwxr-xr-x 1 wdrac was 52458 2013-02-19 10:14:32.859375000 +0900 trimStr.exe
-rwxr-xr-x 1 wdrac was 52429 2013-02-19 10:14:32.859375000 +0900 trimspace.exe
AWS01:/app/wdrac/src>
AIX에서 출력결과:
AWS01:/app/dev/wdrac/src> ls -al
total 534
drwxr-xr-x 2 wdrac was 1024 Feb 19 18:25 .
drwxr-xr-x 3 wdrac was 96 Feb 18 13:38 ..
-rw-r--r-- 1 wdrac was 381 Jan 04 17:28 WSP.sh
-rw-r--r-- 1 wdrac was 5906 Oct 20 2011 ins_precomp.mk
-rw-r--r-- 1 wdrac was 2048 Feb 19 18:14 trimspace.c
-rwxr-xr-x 1 wdrac was 137794 Feb 19 17:41 wdrcsp_0d
-rw-r--r-- 1 wdrac was 0 Feb 19 17:41 wdrcsp_0d.lis
-rw-r--r-- 1 wdrac was 437 Feb 19 17:32 wsp.mk
AWS01:/app/dev/wdrac/src>
ls --time-style=full-iso -al
ls --time-style=full-iso -al
AIX에서는 아예 -- flag가 없는것 같습니다..
AIX에서는 아예 -- flag가 없는것 같습니다. man ls로 봐서는...
적어주신 --time-style=full은 제가 리눅스에서 사용한
--full-time과 같은걸로 알고 있습니다.
이러한 플래그가 AIX에서는 에러가 나서
리눅스에서와 같은 yyyy-mm-dd HH:MM:ss format으로 출력할 수 있는
방법을 아시는 분의 도움을 받고자 하는 겁니다.
답변 감사합니다...
잉 이상하네염...
oslevel을 통해 확인한 AIX 버전
- 5.3.0.0
위 명령어를 통한 결과
- ls --time-style=full-iso -al
4 drwxr-xr-x 3 xxx dba 4096 2013-02-25 10:08:17.000000000 +0900 ./
0 drwxr-xr-x 5 xxx dba 256 2013-02-22 11:48:08.000000000 +0900 ../
4 -rw-r--r-- 1 xxx dba 76 2011-08-03 23:21:33.000000000 +0900 .cvsignore
제가 지금 접속하는 버전은 AIX 6.1
제가 지금 접속하는 버전은 AIX 6.1 이구요..
저도 리눅스에서 작성한 코드가 당연히 작동할 줄 알았는데
--옵션이 에러가 나더군요..
말씀하신대로 명령을 입력하면 아래와 같은 결과가 나옵니다.
AWS01:/app/dev> ls --time-style=full-iso -al
ls: illegal option -- -
ls: illegal option -- -
ls: illegal option -- y
ls: illegal option -- =
ls: illegal option -- -
usage: ls [-1ACFHLNRSabcdefgiklmnopqrstuxEUX] [File...]
AWS01:/app/dev>
ls manual을 아래 첨부합니다.
혹시 처음 UNIX 설치시에 무슨 옵션이 있었을까요?
> 리눅스에서 특정시간대에 업데이트 된 파일을 찾아서
> 리눅스에서 특정시간대에 업데이트 된 파일을 찾아서 처리하기 위해서
find 를 쓰시는게 순리로 보입니다만.. 꼭 ls를 쓰시는 이유라도?
find로 ctime 조건에 맞는 파일목록을 얻는다고
find로 ctime 조건에 맞는 파일목록을 얻는다고 해도
각 파일에 대한 업데이트 일시를 해당 파일명과 함께 full-iso 타입으로 oracle에 넣고자 합니다.
답변 감사합니다.
find + stat 조합으로 가능은합니다..
find + stat 조합으로 가능은합니다..
특정 디렉토리의 모든 파일목록을 가져온다고 할
특정 디렉토리의 모든 파일목록을 가져온다고 할 경우
어떻게 하면 될까요?
참고로 Linus에서는 stat 이지만
AIX에서는 istat 이더군요..
하나의 파일을 istat로 알아보고자 하면 다음과 같이 출력되지만
AWS01:/app/dev/wdrac/src> istat t1.pc
Inode 42071 on device 38/27000 File
Protection: rw-r--r--
Owner: 2008(dbiodev) Group: 2000(was)
Link count: 1 Length 415 bytes
Last updated: Thu Feb 21 17:56:38 2013
Last modified: Thu Feb 21 17:56:38 2013
Last accessed: Thu Feb 21 17:59:50 2013
AWS01:/app/dev/wdrac/src>
복수개의 파일을 full-iso 타입으로 최종변경일시인 ctime만 보고자 합니다.
외국 사이트 어디에선가는
perl을 사용해서 기술을 해놨던데
실제 해보니까 에러가 나더라구요...
perl도 잘 몰라서 수정도 못해보겠고.. ㅠㅠ
일단 사용하시는 os에서 full-iso 타입으로
일단 사용하시는 os에서 full-iso 타입으로 파일의 ctime을
가져오는 방법을 찾아보셔야하겠네요.
제 리눅스머신에서는 stat이 디폴트로 원하시는 포맷으로 보여주네요.
Access: 2013-02-25 14:55:24.174823436 +0900
Modify: 2013-02-25 14:55:24.174823436 +0900
Change: 2013-02-25 14:55:24.174823436 +0900
사용하시는 배포본 또는 OS 에 specific한 내용이므로,
설치된 man page를 참고하시는 수밖에 없어보이고요..
어쩌면 불가능할 수도 있겠네요..
여기까지 하신 이후에, 여러 파일을 한꺼번에 보는 방법은 간단합니다.
find 의 printf 옵션만으로 가능할 수도 있고요..
일단 먼저 파일하나의 ctime만 가져오신 이후에 다시 질문올리시면 간단히 해결될 듯요.
음 ..
아무래도 필요한 옵션을 지원하는 ls 버전이나, rpm 패키지를 확인해서 업그레이드 하는게 제일 나을 것 같네요.
AIX 안 쓴지도 오래되었고, 장비도 없어서 확인은 어려운데..
find 에 printf 옵션이 있다면 충분히 원하는 결과를 얻을 수 있을 것 같고..
stat 을 바로 쓸 수 있는 상황이면, formatting 옵션으로 간단히 처리될 것 같은데..
istat 에 별도 포맷 옵션이 없고, locale 변경이 어렵다면..;;
음.. 좀 번거롭긴 하지만 date 로 날짜 format 을 변경할 수도 있을것 같군요.
대충 아래 스크립트처럼 하면 되지 않을까 싶은데.. 환경이 안 되서 테스트는 못해봤습니다..;;
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
첫번째 find 명령은 -maxdepth와
첫번째 find 명령은
-maxdepth와 -printf 옵션이 없어서 에러가 납니다.
두번째 stat는 LINUX에서는 있지만 AIX는 없는 command 이구요..
istat를 이용한 script는
date 명령에서 에러가 납니다. 역시 -d 옵션이 없구요 date 뒤에 파일을 추가할 수도 없네요...
일단 아래와 같이 하나의 파일명을 주면 해당 파일의 최종변경일을 읽어오기는 합니다.
AWS01:/app/dev> ls -l a.sh | awk '{print $9}' | xargs istat | grep "^Last updated:" | cut -d' ' -f3-
Feb 21 15:47:58 2013
AWS01:/app/dev>
그러나 복수개의 파일을 지정하면 에러가 납니다.
AWS01:/app/dev> ls -l *.sh | awk '{print $9}' | xargs istat | grep "^Last updated:" | cut -d' ' -f3-
Usage: istat {File | Inode Device}
AWS01:/app/dev>
좀 더 찾아봐야겠습니다. 잘하면 될듯 싶은데..
답변 감사합니다..
엄청난 뒷북이지만 저처럼 고생하실 분을 위해 ㅎㅎ
perl -e 'my ($sec, $min, $hour, $mday, $mon, $year) =localtime((stat(shift))[9]);printf("%04d-%02d-%02d %02d:%02d:%02d\n", $year+1900, $mon+1, $mday, $hour, $min, $sec)' 파일명
이렇게 하니까 되네요.
원하는 형태대로 수정하면 되구요~
저는 날짜만 필요해서 날짜부분만 넣고 돌렸어요~
perl이 os특성도 안타고 알아두면 참 좋은거 같긴한데 어려워서 ㅎㅎ ;ㅁ;
엄청난뒷북 2
그대로 복붙하시면 됩니다
레드햇계열 : ls -l --time-style=long-iso | awk '{print $6" "$7" "$8}'
AIX, HP : ls | xargs -i perl -e '@d=localtime ((stat(shift))[9]); printf "%04d-%02d-%02d %02d:%02d:%02d {} \n",$d[5]+1900,$d[4]+1,$d[3],$d[2],$d[1],$d[0]' {}
뒷북이 도움된 사람
너무 감사합니다. 저도 같은 환경에서 고생하다가 딱 원하는 답변이 있었네요 ㅎㅎ
댓글 달기