Как мне получить необходимые входные данные для этого цикла for?

Для выявления пакетов, вызывающих конфликты (или другие проблемы )во время обновления пакета, я считаю, что наиболее полезным подходом является включение режима отладки распознавателя :

.
apt -o Debug::pkgProblemResolver=yes upgrade

Это покажет вам все проблемы, с которыми сталкивается распознаватель, а также пакеты, которые заставили его рассмотреть проблемные зависимости.

-1
29.07.2020, 13:21
1 ответ

Эта команда:

for f in "`find /sdcard/Download/tordownloadbackup/ -type f |...

выглядит неуклюже и подвержено ошибкам. На самом деле очень не рекомендуется перебирать напечатанный список файлов с помощью for.

Самый надежный способ перебора файлов, найденных с помощью findв bash, — это использовать readи строки с завершающим нулем. Используйте < <(command)после whileдля передачи вывода команды в read, это называется подстановкой процесса .

while IFS= read -r -d $'\0' file; do
    # Arbitrary operations on "$file" here
done < <(find /some/path -type f -print0)

Спасибо за старый ответ @SiegeX здесь:https://stackoverflow.com/questions/8677546/reading-null-delimited-strings-through-a-bash-loop

Кроме того, rev |cut -c 6-100| cut -d / -f 1 |revвыглядит странно. Я думаю, что это должно напечатать базовое имя каталога. Используйте для этого либо встроенную в bash -манипуляцию со строками, либо dirnameи basename.

Таким образом, вы можете в конечном итоге переписать этот цикл в (с манипуляциями со строками, быстрее, потому что встроенный -в):

while IFS= read -r -d $'\0' file; do
  Filebasename="${file##*/}"
  Dirname="${file%/*}"
  Dirbasename="${Dirname##*/}"
  # other stuff here
done < <(find /sdcard/Download/tordownloadbackup/ -type f -print0)

Дополнительные сведения об удалении подстроки см. в Проекте документации по Linux .

Или используйте basenameиdirname(медленнее, потому что внешние программы):

while IFS= read -r -d $'\0' file; do
  Dirbasename="$(basename -- "$(dirname -- "$file")")"
  # other stuff here
done < <(find /sdcard/Download/tordownloadbackup/ -type f -print0)
1
18.03.2021, 23:16

Теги

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