Перенаправление вывода adb shell ls /data/data | grep -i com.company
в файл и просмотрев его с помощью шестнадцатеричного редактора, я обнаружил, что к ним добавлен возврат каретки в стиле Windows \r\n
(0x0D 0x0A). Таким образом, избавление от \r
с помощью tr -d '\r'
решило проблему.
Вся команда с использованием for
(из ответа Stéphane Chazelas ):
for x in $(adb shell ls /data/data | grep -i com.company | tr -d '\r'); do adb uninstall $x; done
Или аналогичным образом с использованием xargs
:
adb shell ls /data/data | grep -i com.company | tr -d '\r' | xargs -r -n1 adb uninstall
Другой вариант (как любезно объяснено Stéphane Chazelas в комментариях ниже) полностью отключает \r
с помощью stty -opost
, хотя для этого, скорее всего, требуется busybox
(или альтернатива, такая как toybox
) для установки на Android-устройство.
$ adb shell echo test | sed -n l
test\r$
$ adb shell 'busybox stty -opost; echo test' | sed -n l
test$
команда разворачивания "xvf" работает только для отдельных файлов
, что делает необходимым использование цикла :
for file in ./*.tar; do tar xvf "$file"; done
Фактически с find
вы можете выполнять работу без циклов. Примерно так:
find -iname '*.tar' -maxdepth 1 -exec tar xvf '{}' \;
Логика такая:
-iname
соответствует файлам с расширением .tar
(без учета регистра), а -maxdepth 1
ограничивает соответствие диапазон до глубины 1 (так что ./*/*. tar
и т.п. не будут сопоставлены) -exec
выполняет tar xvf
для совпадающих файлов (обратите внимание, что ;
и {}
необходимо экранировать; дополнительную информацию см. в find (1)
)