Imprime arquivos com tamanho de arquivo menor que 100 bytes

3

Esse script deve imprimir o tamanho do arquivo e o nome de todos os arquivos em um diretório com menos de 100 bytes. Esse script que escrevi funciona perfeitamente no meu Ubuntu, mas não funciona no meu Mac OS Lion. Alguém pode me dizer por quê?

#!/bin/bash

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

3 respostas

4

Uau. Parece que você está fazendo isso mais difícil do que tem que ser:

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

Feito.

    
por 31.01.2013 / 03:41
0

Veja esta postagem: Nested bash if / and / or statement não funciona do OS X para o Ubuntu

O Ubuntu usa dash , não tenho certeza se você está usando bash ou o que está no OSX. Coloque isso no topo para garantir que você está usando o mesmo shell nos dois sistemas:

#! /usr/bin/env bash

-ou -

#!/bin/bash

Você também pode echo $SHELL ver qual shell está usando na linha de comando. Com os scripts bash , você pode ativar a depuração adicionando esta linha na parte superior:

set -x

Por exemplo

% 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

com o conjunto -x ativado

% ./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 ]]

Recursos

por 31.01.2013 / 02:39
0

Refatorou o uso de um único processo externo:

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

Observe a citação, o uso do redirecionamento para evitar a necessidade de cut e o uso de um padrão curinga para explorar o fato feliz de que qualquer número com três ou mais dígitos seja maior ou igual a 100.

(Seu código diz menos que ou igual a 100, enquanto a descrição do problema diz genuinamente menos que 100; você pode tirar o caso 100) ;; se o seu código estiver errado e sua pergunta estiver correta.)

Observe que wc -c conta caracteres, não bytes; para texto em uma codificação de comprimento variável ou multibyte, como Unicode, eles não são os mesmos.

    
por 31.01.2013 / 09:17

Tags