Как распаковать набор файлов в каталоге?

Перенаправление вывода 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$

0
31.01.2017, 01:04
2 ответа

команда разворачивания "xvf" работает только для отдельных файлов

, что делает необходимым использование цикла :

for file in ./*.tar; do tar xvf "$file"; done
3
28.01.2020, 02:16

Фактически с find вы можете выполнять работу без циклов. Примерно так:

find -iname '*.tar' -maxdepth 1 -exec tar xvf '{}' \;

Логика такая:

  • -iname соответствует файлам с расширением .tar (без учета регистра), а
  • -maxdepth 1 ограничивает соответствие диапазон до глубины 1 (так что ./*/*. tar и т.п. не будут сопоставлены)
  • finally -exec выполняет tar xvf для совпадающих файлов (обратите внимание, что ; и {} необходимо экранировать; дополнительную информацию см. в find (1) )
2
28.01.2020, 02:16

Теги

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