최종 업데이트: 해결됨 - 해결 방법은 다음과 같습니다.

최종 업데이트: 해결됨 - 해결 방법은 다음과 같습니다.

HP-UX B.11.11 운영 체제를 사용하고 있습니다. 내 거필요하다디렉토리 목록만 표시되며 마지막으로 수정된 시간 형식은 다음과 같아야 합니다.일-월-년 HH:MI:SS AM/PM. 다음 방법 중 하나를 사용하여 목록을 얻을 수 있습니다

    ls -lF | grep /

또는

    ls -ld -- */

하지만 원하는 대로 시간 형식을 지정할 수 없습니다. 이것- 풀 타임또는--시간 스타일매개변수는 HP-UX에 영향을 주지 않으며 HP-UX도 영향을 미치지 않습니다.통계자료게다가.

질문:

  1. 주요 요구사항:누구든지 위 형식의 마지막 수정 타임스탬프와 함께 현재 디렉터리 아래의 모든 디렉터리 이름(파일 아님) 목록을 표시하는 스크립트를 제공할 수 있습니까? 소유자 이름, 그룹 이름, 크기, 권한 등이 필요하지 않습니다.

  2. C나 Perl을 사용하지 않고 표준 명령과 매개변수만 사용하여 이 정보를 표시할 수 있는 다른 방법이 있습니까?

  3. 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 statman lstatman strftimeLC_TIMEPMAM

설치된 경우 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 시스템에서는 모두 대문자로 된 월 약어를 사용할 수 있지만 %^bHP/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

관련 정보