Подстановка параметра не может воздействовать на результат подстановки другого параметра без предварительного сохранения исходного результата в переменной и применения к ней второй подстановки.
Вы также зацикливаете вывод find
, что не рекомендуется .
Правильный способ обеспечить цикл с результатом find
— это вызвать дочернюю оболочку и выполнить цикл там:
find. -type f -iname '*_??????????.pdf' -mtime -1 -exec sh -c '
for pathname do
timestamp=${pathname##*_} # remove up to last _
timestamp=${timestamp%.pdf} # remove.pdf
printf "pathname=%s\ttimestamp=%s\n" "$pathname" "$timestamp"
done' sh {} +
Таким образом, вам не нужно беспокоиться о реальных путях. Имена файлов (, т. е. имена файлов и каталогов, а также другие типы файлов )в Unix могут содержать любой символ, кроме /
и \0
, например пробел и новую строку. Используя подстановку команд в find
, вы заставляете оболочку, во-первых, выполнять разбиение слов (по умолчанию на пробелы, табуляции и новые строки ), а во-вторых, выполнять генерацию имен файлов на основе шаблонов, найденных в путях, возвращенных из find
. Таким образом, ваш исходный цикл может оказаться зацикленным на совсем других словах, чем вы ожидали.
Связанные:
sudo apt-get update --fix-missing
sudo apt-get upgrade --fix-missing
1-й :попробуйте команду apt -get (, если вы этого не сделали ), поэтому
apt-get update && apt-get upgrade
, то эта команда поможет очистить ваши зависимости
sudo apt-get autoclean && sudo apt-get clean && sudo apt-get autoremove
те помогли в похожей проблеме. Я надеюсь, что они также помогли вам;)
Я бы посоветовал бежать
sudo apt-get autoclean && sudo apt-get clean && sudo apt-get autoremove && sudo apt-get update --fix-missing && sudo apt-get upgrade --fix-missing