파일 크기가 100바이트 미만인 파일을 인쇄합니다.

파일 크기가 100바이트 미만인 파일을 인쇄합니다.

이 스크립트는 디렉토리에 있는 100바이트 미만의 모든 파일의 파일 크기와 이름을 인쇄해야 합니다. 제가 작성한 이 스크립트는 Ubuntu에서는 완벽하게 실행되지만 Mac OS Lion에서는 작동하지 않습니다. 누구든지 이유를 말해 줄 수 있습니까?

#!/bin/bash

for i in $(ls)
do
  if [[ $(wc -c $i | cut -d" " -f1) -le 100 ]]; then
    echo $(wc -c $i)
  fi
done

답변1

우와. 이미보다 더 어렵게 만들고 있는 것 같습니다.

find . -size -100c -exec stat -c "%s : %n" {} \;

완벽한.

답변2

이 문서를 참조하세요:중첩된 bash if/and/or 문이 OS X에서 Ubuntu로 작동하지 않습니다.

Ubuntu는 를 사용하는데 , OSX에서 무엇을 사용하는지 dash잘 모르겠습니다 . bash두 시스템 모두에서 동일한 쉘을 사용하고 있는지 확인하려면 이것을 맨 위에 놓으십시오.

#! /usr/bin/env bash

-또는-

#!/bin/bash

echo $SHELL명령줄에서 어떤 셸을 사용하고 있는지 확인할 수도 있습니다 . 스크립트를 사용하면 bash상단에 다음 줄을 추가하여 디버깅을 켤 수 있습니다.

set -x

예를 들어

% ls -l
total 4
-rw-rw-r-- 1 saml saml   0 Jan 30 20:30 a1
-rw-rw-r-- 1 saml saml   0 Jan 30 20:30 a2
-rwxrwxr-x 1 saml saml 151 Jan 30 20:45 a.bash

% ./a.bash 
0 a1
0 a2

set -x 활성화 후

% ./a.bash 
++ ls
+ for i in '$(ls)'
++ wc -c a1
++ cut '-d ' -f1
+ [[ 0 -le 100 ]]
++ wc -c a1
+ echo 0 a1
0 a1
+ for i in '$(ls)'
++ wc -c a2
++ cut '-d ' -f1
+ [[ 0 -le 100 ]]
++ wc -c a2
+ echo 0 a2
0 a2
+ for i in '$(ls)'
++ wc -c a.bash
++ cut '-d ' -f1
+ [[ 123 -le 100 ]]

자원

답변3

단일 외부 프로세스를 사용하도록 리팩터링되었습니다.

for i in *; do
  wc=$(wc -c <"$i")
  case $wc in 100 ) ;; ???* ) continue ;; esac
  echo "$wc $i"
done

인용에 주의하고 리디렉션을 사용하여 필요를 피하고 cut와일드카드 패턴을 사용하여 세 자리 이상의 숫자가 100보다 크거나 같다는 사실을 활용하세요.

(코드에 100보다 작거나 같다고 나와 있지만 문제 설명은 실제로 100보다 작습니다. 100) ;;코드가 잘못되었고 질문이 올바른 경우 사례를 제거할 수 있습니다.)

wc -c바이트 수가 아니라 문자 수가 계산됩니다. 가변 길이 텍스트나 멀티바이트 인코딩(예: 유니코드)의 경우에는 다릅니다 .

관련 정보