HP-UX B.11.11 운영 체제를 사용하고 있습니다. 내 거필요하다디렉토리 목록만 표시되며 마지막으로 수정된 시간 형식은 다음과 같아야 합니다.일-월-년 HH:MI:SS AM/PM. 다음 방법 중 하나를 사용하여 목록을 얻을 수 있습니다
ls -lF | grep /
또는
ls -ld -- */
하지만 원하는 대로 시간 형식을 지정할 수 없습니다. 이것- 풀 타임또는--시간 스타일매개변수는 HP-UX에 영향을 주지 않으며 HP-UX도 영향을 미치지 않습니다.통계자료게다가.
질문:
주요 요구사항:누구든지 위 형식의 마지막 수정 타임스탬프와 함께 현재 디렉터리 아래의 모든 디렉터리 이름(파일 아님) 목록을 표시하는 스크립트를 제공할 수 있습니까? 소유자 이름, 그룹 이름, 크기, 권한 등이 필요하지 않습니다.
C나 Perl을 사용하지 않고 표준 명령과 매개변수만 사용하여 이 정보를 표시할 수 있는 다른 방법이 있습니까?
WinSCP가 UI에 전체 날짜/시간 형식을 표시하는 방법을 알고 싶습니다. UI에 디렉터리 내용을 표시하기 위해 내부적으로 어떤 명령을 사용하는지 아는 사람이 있나요?
도움을 주시면 감사하겠습니다. 감사해요.
업데이트(다음 항목만 편집):
따라서 Perl 스크립트를 사용한 Stéphane Chazelas의 답변은 매우 잘 작동합니다. 이제 이를 쉘 스크립트로 변환하려고 시도하지만 실행하는 동안 오류가 발생합니다. 쉘 스크립트를 저장했습니다dir_list.sh
아래에/dev/scripts/
. 내가 잘못 가고 있는 부분을 도와주실 수 있나요?
#!/usr/bin/sh
# dir_list.sh : Generate a comma separated directory list with last modified timestamp
# Navigate to the directory where listing is required
cd /dev/product/jobs
# Execute Perl script
/usr/bin/perl -MPOSIX -MFcntl -MFile::stat -le '
setlocale(LC_TIME, "C");
for (<*>) {
$s = lstat $_ or die "$_: $!\n";
print "$_," . uc(strftime("%d-%b-%Y %I:%M:%S %p", localtime $s->mtime))
if S_ISDIR($s->mode)
}'
exit 0
에러 메시지
내가 시도했다는 점에 유의하십시오.#!/usr/bin/sh
마찬가지지만 동일한 오류 메시지와 함께 실패합니다.interpreter "/usr/bin/sh" not found
$ ./dir_list.sh
interpreter "/bin/sh" not found
file link resolves to "/usr/bin/sh"
ksh: ./dir_list.sh: not found
최종 업데이트: 해결됨 - 해결 방법은 다음과 같습니다.
dir_list.sh
( )을 호출하면 $ ./dir_list.sh
스크립트에 지정된 대상 폴더를 검색하고 폴더 이름 및 관련 타임스탬프를 쉼표로 구분된 레코드로 표시하는 Unix 셸 스크립트를 만들었습니다.
#! /usr/bin/ksh
# dir_list.sh : Generate a comma separated directory list with last modified timestamp
#
# Navigate to the Target Directory
cd /dev/product/jobs || exit
#
# Execute Perl script to format the output
/usr/bin/perl -MPOSIX -MFcntl -MFile::stat -le '
setlocale(LC_TIME, "C");
for (<*>) {
$s = lstat $_ or die "$_: $!\n";
print "$_," . uc(strftime("%d-%b-%Y %I:%M:%S %p", localtime $s->mtime))
if S_ISDIR($s->mode)
}'
#
exit 0
감사해요스티븐 차제라스당신의 도움을 주셔서 감사합니다! :)
답변1
GNU 유틸리티가 설치되어 있지 않은 한 가장 좋은 방법은 아마도 perl
다음과 같은 레거시 시스템일 것입니다.
perl -MPOSIX -MFcntl -MFile::stat -le '
setlocale(LC_TIME, "C");
for (<*>) {
$s = lstat $_ or die "$_: $!\n";
print "$_ " . uc(strftime("%d-%b-%Y %I:%M:%S %p", localtime $s->mtime))
if S_ISDIR($s->mode)
}'
이는 파일 메타데이터를 검색하고 날짜 형식을 지정하는 데 사용되는 기능인 perl
표준 POSIX 시스템 호출에 대한 인터페이스 입니다 .lstat()
strftime()
자세한 내용은 perldoc POSIX
,,,,,를 참조하세요. perldoc -f lstat
영어 월 이름을 가져오거나 사용자 기본 설정에 관계없이 C 로케일을 사용합니다.perldoc -f stat
man lstat
man strftime
LC_TIME
PM
AM
설치된 경우 zsh
:
zsh -c 'zmodload zsh/stat
LC_ALL=C stat -nA times -LF "%d-%b-%Y %I:%M:%S %p" +mtime -- *(/) &&
for f t ($times) printf "%s\n" "$f: ${(U)t}"'
위에서는 perl
' uc()
및 zsh
'를 사용하여 ${(U)var}
타임스탬프를 대문자로 변환했습니다. GNU 시스템에서는 모두 대문자로 된 월 약어를 사용할 수 있지만 %^b
HP/UX에서는 사용할 수 없는 것 같습니다.
답변2
찾다. -type d -exec stat {} \;일반적인 Unix System V 방식입니다. 것 같다통계자료~이 되다통계자료HP-UX에서는 명령이 다음과 같습니다. 찾다. -type d -exec fstat {} \;
요구 사항에 따라 원하는 결과를 정확하게 얻으려면 출력을 awk(또는 nawk 또는 gawk)로 파이프해야 할 수도 있습니다.
인용하다:http://hpux.connect.org.uk/hppd/hpux/Shells/fstat-1.0/man.html