если условие вызывает ошибку

Думаю, это невозможно. Я думал, что Kali Linux 2.0 действительно хорош, но после этого я думаю, что это большой провал. Переход с wlan0 на wlan0mon - убийца. Почему? Многие скрипты будут работать в Kali на всех версиях, кроме 2.0, потому что wlan0mon. Это действительно печально, и если мы не сможем сделать больше режима мониторов, я думаю, что оставлю этот дистрибутив на некоторое время.

РЕДАКТИРОВАТЬ: Кто-то сказал, что ядро ​​2.6.31 или выше использует виртуальный уровень или что-то в этом роде. Попробуйте воспользоваться помощью команды "iw", и вы увидите, что можно добавить новый режим мониторов:)

-1
20.02.2018, 08:14
2 ответа

El problema aquí es que está tratando de analizar la salida de ls. Esto es siempre una mala idea. Consulte ¿Por qué *no *analiza `ls `? para una explicación de por qué es así.

Si desea el tamaño de un archivo, utilice stat. p.ej.

minsize=$(( 800 * 1024 * 1024 ))

# alternatively, if you have `numfmt` from GNU coreutils, delete the line above
# and uncomment the following line:
#minsize=$(echo 800M | numfmt --from=iec)

while read -r line3 ; do
  if [ "$(stat -L --printf '%s' "$line3")" -gt "$minsize" ]; then
    echo "$line3" >>  xyz/size_list.txt
  fi
done < xyz/symlinks_paths.txt

Nota :He usado stat's-L(aka--dereference)opción anterior porque el nombre de archivo de entrada implica que los nombres de archivo enumerados en él pueden ser enlaces simbólicos. Sin -L, statno seguirá un enlace simbólico, imprimiría el tamaño del enlace simbólico.


Si desea que el tamaño del archivo se imprima en el archivo de salida junto con el nombre del archivo, entonces el bucle whilesería más parecido al siguiente:

while read -r line3 ; do
  fsize=$(stat -L --printf '%s' "$line3")

  if [ "$fsize" -gt "$minsize" ]; then
    fsize=$(echo "$fsize" | numfmt --to=iec)
    printf "%s\t%s\n" "$fsize" "$line3" >>  xyz/size_list.txt
  fi
done < xyz/symlinks_paths.txt
3
28.01.2020, 05:07

Esto se puede hacer confind(y xargs), pero no ganará ningún concurso de belleza.

Escriba un script llamadocheck_files:

#!/bin/sh
find "$@" -size +800M –print

Luego ejecute

xargs -d '\n' < xyz/symlinks_paths.txt./check_files

donde

  • Puede mover < xyz/symlinks_paths.txtredirección hasta el final de la línea de comando, como en xargs -d '\n'./check_files < xyz/symlinks_paths.txt, o al principio, o en cualquier otro lugar. O puede reemplazarlo con -a xyz/symlinks_paths.txt. Cualquiera de estos significa que xargsleerá de xyz/symlinks_paths.txt.
  • Puede reemplazar ./check_filescon un nombre de ruta absoluto a su script check_files.

-d '\n'significa usar nueva línea como delimitador al leer xyz/symlinks_paths.txt. Probablemente puedas dejar esto fuera si sus nombres de archivo no contienen espacios en blanco (espacio (s )o tabulador (s )), comillas (recuerda que una comilla simple(')es el mismo carácter que un apóstrofo )o barras invertidas, y estás dispuesto a apostar el salario de un año a que nunca lo harán.

Esto lee cada línea del archivo y lo convierte en un argumento para el script check_files, que los pasa afindcomo punto de partida -argumentos . Mucha gente sabe que puedes correr findcon múltiples argumentos que comienzan -punto ; por ejemplo,

find dir1 dir2 dir3  search-expression

No es tan conocido que esos argumentos no tienen por qué ser directorios; pueden ser archivos; por ejemplo,

find file1 file2 file3  search-expression

(o una combinación de directorios y archivos ). findsimplemente aplicará la expresión a cada archivo nombrado como un punto inicial -.

Esto comprueba cada archivo cuyo nombre aparece en xyz/symlinks_paths.txtpara ver si su tamaño es de 800M o más, e imprime los que lo son.

Si los nombres de archivo pueden hacer referencia a enlaces simbólicos (como sugiere el nombre xyz/symlinks_paths.txt)y quieres mirar el apuntado -a los archivos (que seguramente haces ), cambie finda find -L.

No necesita tener un script check_filesseparado; puedes hacer

xargs -d '\n' < paths.txt sh -c 'find "$@" -size +800c -print' sh

Nuevamente, cambie finda find -Lsi lo desea.

1
28.01.2020, 05:07

Теги

Похожие вопросы