답변:
시도하십시오 ls -l | awk '{print $7}'
.
awk
열을 선택하여이 작업에 적합합니다.
ls -l --block-size=M
합니까?
ls
명령은 POSIX 표준이 아니므로 의존하는 스크립트가 ls
다른 시스템에서 또는 시간이 지남에 따라 중단 될 수 있습니다. 자세한 내용은이 페이지의 @ormaaj의 답변을 참조하십시오. 요청한 것을 수행하는 한 가지 방법은 Bash 루프를 사용하는 것입니다. 다음은 예입니다. for FILENAME in *; do FILESIZE=$(( $( stat --format=%s "${FILENAME}" ) / 1024 )); echo "${FILENAME}" ${FILESIZE}; done
. 물론, 대신 echo
처리를 사용합니다.
... | xargs -d '\n' du -m
.
-exec
옵션 을보고 싶을 수도 있습니다 find
.
ls 구문 분석하지 마십시오 . GNU를 사용하십시오 find
. 또는 이식성이 중요하지 않은 경우 stat(1)
.
find . -maxdepth 1 -printf '%Td\n'
파일 이름 목록 이외의 데이터를 한 줄씩 읽고 필드로 나누려면 BashFAQ / 001을 참조하십시오.
대부분의 환경에서 적합한 줄 바꾸기로 구분 된 파일 이름 목록을 안정적으로 읽는 방법은 없습니다.
쉘에서 특정 열을 가져올 수 있습니다 :
ls -al | while read perm bsize user group size month day time file; do echo $day; done
나 awk
같이 @Corey 응답 , cut -c44-45
(이후도 조정 후 일하는 것이 ls
열을 고정하고있다), 또는 어떤 다른, 그러나 가장 큰 문제는되지 않을 것입니다 (예를 들어 유닉스에있을 수 있습니다 신뢰할 수 있고 방탄 $6
,하지 $7
, 그것을 기계 친화적이지 않기 때문에 명령 을 구문 분석하지 않는 것이 좋습니다ls
.
가장은 다음과 같은 가능한 다른 명령을 사용하는 것입니다 find
또는 stat
당신이 필요로 출력을 포맷 관련 옵션을 제공 할 수 있습니다. 예를 들면 다음과 같습니다.
$ stat -c "%x %n" *
2016-04-10 04:53:07.000000000 +0100 001.txt
2016-04-10 05:08:42.000000000 +0100 7c1c.txt
며칠 동안 수정 한 열만 반환하려면 다음 예제를 시도하십시오.
stat -c "%x" * | while read ymd; do date --date="$ymd" "+%d"; done
GNU stat
는 BSD에 대해 다른 옵션을 가질 수 stat
있으므로 다른 운영 체제에서 여전히 방탄하지는 않습니다.
stat
. date
그러나 잘못 설정되었습니다. 자체적으로 현재 날짜를 인쇄하기 --date=$ymd
date
ls -la | cut -c32-33
는 사용자 이름 '길이와 파일에'에 크기에 의존하기 때문에 총 정직의 명령뿐만 아니라 때문에 이름을 가진 가능한 함정, 단지 완전히 신뢰할 수없는, 단순히. stat -c "%x" *.*
명령은 좋아 보이지만, 사용하여 *.*
만 점을 포함하는 파일 이름에 restricing하고 있습니다. 나는 그 의도가 숨겨진 파일도 잡는 것 같아; 이 경우에는 사전에 dotfiles에 대한 글 로빙 활성화해야 사용이 *
대신 *.*
: shopt -s dotglob; stat -c "%x" * | [...]
.
--date="$ymd"
에 따라 date
명령에 추가해야합니다 . 그렇지 않으면 해당 월의 현재 날짜가 인쇄됩니다.
ls
. 이find
명령은 대단히 도움이됩니다.