#bash #file-extension
Вопрос:
В терминале debian я пытаюсь удалить все .jpg папки и подпапки, если .cr2 существует в одной папке.
Предполагается, что у них одно и то же имя. 123.jpg 123.cr2
Я знаю, как удалить весь файл .jpg с помощью команды «Найти».
find {PATH} -type f -name '*.jpg' -delete
но как я могу добавить условие (если .cr2 существует)
Я нашел эту тему 10 лет, но она предназначена для Windows и python
Комментарии:
1. Примечательно, что я не смог найти дубликат для этого, хотя это похоже на часто задаваемые вопросы. Спасибо за заполнение пробела в базе знаний!
Ответ №1:
Вы можете попробовать что-то вроде:
shopt -s globstar
for i in /path/**.jpg
do
RAW=${i%.jpg}.cr2
if [ -f "$RAW" ]
then rm "$i"
fi
done
Если вы поклонник oneliners, вы можете преобразовать скрипт во что-то вроде:
shopt -s globstar; for i in /path/**.jpg; do [ -f "${i%.jpg}.cr2" ] amp;amp; rm "$i"; done
Комментарии:
1. Глобус
**
поддерживается большинством современных оболочек, но это не функция POSIX. Некоторые сайты отключают его по умолчанию, поэтому вам придется включить его отдельно. В Баш,shopt -s globstar
2. Просто к вашему сведению, вы могли бы заменить свою 3-строчку
if-then-fi
на[ -f "$RAW" ] amp;amp; rm "$i"
3. Круто — у тебя уже есть мой голос👍
4. @MarkSetchell, спасибо. Вероятно, код можно сократить еще больше:
[ -f "${i%.jpg}.cr2" ] amp;amp; rm "$i"
5. Действительно, и если вы тоже поставите точки с запятой перед
do
иdone
, это может быть однострочный😉