Почему я теряю данные, используя эту конструкцию bash pipe?

Para mover todos los directorios debajo de /home/lanein1/AshtonRPOUT/que tiene una hora de modificación de 30 días en el pasado, pero deja intacto el directorio superior (/home/lanein1/AshtonRPOUT/), puede usar

find /home/lanein1/AshtonRPOUT/ -mindepth 1 -maxdepth 1 -type d \
    ! -path '/home/lanein1/AshtonRPOUT/Arch*' -mtime +30 \
    -exec mv {} /home/lanein1/AshtonRPOUT/Arch/ ';' -prune

Cosas a tener en cuenta aquí:

  • Estamos buscando directorios, no archivos, así que usaremos -type d.

  • El directorio de destino está incluido en el conjunto de directorios buscados por find, por lo que usamos ! -path '...'para evitar esa ruta.

  • No desea intentar mover el directorio superior, por lo que agregamos -mindepth 1para comenzar a buscar debajo de esa ruta. Asimismo, -maxdepth 1obliga a finda no descender a las subcarpetas (dices que tienes subcarpetas y que estas contienen solo archivos ).

  • (Esto no es necesario aquí, ya que usamos -maxdepth 1pero... )Mover un directorio cambiará la estructura del directorio. Por lo tanto, agregamos -pruneal final. Esto elimina la ruta movida de la lista de directorios que findconsiderará. Sin esto, findintentaría ingresar a directorios no -existentes (si se encontrara y moviera un directorio ).

11
10.06.2019, 08:32
2 ответа

Поскольку команда ncвнутри <(...)также будет считываться со стандартного ввода.

Более простой пример:

$ nc -l 9999 >/tmp/foo &
[1] 5659

$ echo text | cat <(nc -N localhost 9999) -
[1]+  Done                    nc -l 9999 > /tmp/foo

Куда делись text? Через неткат.

$ cat /tmp/foo
text

Ваша программа и ncконкурируют за один и тот же стандартный ввод, и ncполучает его часть.

16
27.01.2020, 19:58

epoll ()или poll (), возвращаемые с помощью E/POLLIN, только сообщат вам, что одиночное чтение()может не блокироваться.

Не то чтобы вы могли выполнять много операций чтения одного байта ()до новой строки, как делаете вы.

Я говорю может , потому что чтение ()после epoll (), возвращенное с помощью E/POLLIN, может по-прежнему блокироваться.

Ваш код также попытается прочитать EOF и полностью проигнорирует все ошибки чтения ().

3
27.01.2020, 19:58

Теги

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