Начиная с версии 2.0.0
(, выпущенной в 2016 году ), вы можете нажать c
, чтобы пометить процесс и его дочерние элементы. Это упоминается во встроенной справке -, которая показана на h
.
Затем вы можете нажать k
, чтобы отправить сигнал помеченным процессам; вам будет представлен список всех возможных сигналов на выбор.
find. -type f -exec sh -c 'for name do rm -f -- "$name.7z.bad"; done' sh {} +
Приведенная выше команда находит все обычные файлы в текущем каталоге или ниже, а затем пытается удалить их все, но сначала добавляет .7z.bad
в конец имен.
Таким образом, все файлы с именами, оканчивающимися на .7z.bad
, удаляются, если есть соответствующие файлы без этого суффикса имени файла.
Тестирование в пустом каталоге:
$ touch file-{1..5}.txt.7z.bad
$ touch file-{1..3}.txt
$ ls
file-1.txt file-2.txt file-3.txt file-4.txt.7z.bad
file-1.txt.7z.bad file-2.txt.7z.bad file-3.txt.7z.bad file-5.txt.7z.bad
$ find. -type f -exec sh -c 'for name do rm -f -- "$name.7z.bad"; done' sh {} +
$ ls
file-1.txt file-2.txt file-3.txt file-4.txt.7z.bad file-5.txt.7z.bad
find. -type f -name "*.7z.bad" -exec sh -c '
for file; do
if [ -f "${file%.7z.bad}" ]; then
rm -- "$file"
else
echo "keeping file $file" >&2
fi
done
' sh {} +
Это передает все имена файлов, найденные с помощью find
, сценарию оболочки, который затем перебирает имена файлов и проверяет, есть ли у каждого имени файла без суффикса .7z.bad
существует. В этом случае он удаляет файл с суффиксом .7z.bad
или в противном случае печатает предупреждающее сообщение.
Замените -f
на -s
, если вы хотите проверить, существует ли разархивированный файл и имеет ненулевой -размер файла.