Можно объединить несколько предикатов, связав их.
Нет -oldermt
, но можно записать это как -not -newermt
.
Вы хотите:
-newermt '-15 seconds'
, чтобы сказать, что файл имеет возраст менее 15 секунд, и -not -newermt '-2 seconds'
, чтобы сказать, что файл имеет возраст более 2 секунд Попробуйте:
find /my/directory -newermt '-15 seconds' -not -newermt '-2 seconds'
Или, чтобы быть POSIX-совместимым:
find /my/directory -newermt '-15 seconds' \! -newermt '-2 seconds'
-121--25967-
Webmin обычно выполняется как пользователь Apache, а не как root. xinetd
, с другой стороны, который может управляться с помощью Webmin, должен выполняться как root, поскольку он привязывается к привилегированным портам (
-121--216758-
Вы не упомянули свою ОС....
Это прекрасно работает с современной реализацией находки, как от FreeBSD или с sfind
.
find/my/directory -name '* .jpg' -mtime -15s -mtime + 2s
Sfind является частью инструментов Schily: http://sourceforge.net/projects/schilytools/files/
ВНИМАНИЕ: я только что обнаружил проблему в sfind
. Если аргументы -mtime
меньше 60s, они будут работать неправильно, так как в данный момент время файла сравнивается с меткой времени 60 секундах в будущем, которая была первоначально вычислена для переключения года для -ls
.
BTW: -not
не принадлежит find
, это непортящийся GNUism.
La forma correcta es pasar la variable bash/shell
al script awk
como argumento a través de la opción-v
(variable
):
i=1;
while [ $i -lt 5 ]; do
A=$(awk -v i="$i" -F_ '{ print $i }' <<< 'one_two_test_three')
echo $A
((i++))
done
La salida:
one
two
test
three
No es necesario un bucle de shell para analizar los datos:
$ awk -F '_' '{ for (i=1; i<=NF; ++i) print $i }' <<<'one_two_test_three'
one
two
test
three
El script analiza la entrada como una_
-lista delimitada e imprime cada campo.
Más corto:
$ awk -F '_' 'BEGIN { OFS="\n" } { $1=$1 } 1' <<< 'one_two_test_three'
one
two
test
three
Esto establece el separador de campo de salida en una nueva línea, luego fuerza una nueva -formación de todo el registro (con el nuevo separador insertado )antes de imprimir el registro.
Más corto:
$ tr '_' '\n' <<<'one_two_test_three'
one
two
test
three
Acceso a los datos en un bucle:
tr '_' '\n' <<<'one_two_test_three' |
while read -r word; do
printf 'Got "%s"\n' "$word"
done
De esta manera, no llama a la utilidad que usa para analizar los datos más de una vez.
Asumiendo que los valores no tienen líneas nuevas, entonces :Su código con cambios mínimos para que funcione :El shebang debe ser#!/bin/bash
(ksh o zsh )ya que está usando <<<
.
i=1
while [ "$i" -le 4 ]
do
A=$(awk -v var="$i" -F_ '{print $var}' <<< 'one_two_test_three')
echo "$A"
i=$((i+1))
done
Sin embargo, como la cadena proviene del caparazón, esto podría simplificarse a:
IFS=_ read v1 v2 v3 v4 <<<'one_two_test_three'
printf '%s\n' "$v1" "$v2" "$v3" "$v4"
Y usando una matriz de valores (número variable de valores):
#!/bin/bash
IFS=_ read -a v <<<'one_two_test_three'
printf '%s\n' "${v[@]}"
Si se requiere que se use un shell más simple:
#!/bin/sh
IFS=_ read v1 v2 v3 v4 <<-_expandvar_
one_two_test_three
_expandvar_
printf '%s\n' "$v1" "$v2" "$v3" "$v4"
Por supuesto, si no hay necesidad de establecer una variable ni es un problema establecer el valor de IFS en un script:
#/bin/sh
a='one_two_test_three'
IFS=_
set -f
printf '%s\n' $a
Tenga en cuenta que la variable se está utilizando sin -entre comillas, lo que puede ser inseguro.