У меня есть каталог, файлы которого имеют расширение .JPG или .NEF, и я хочу удалить файлы формы X.NEF, для которых X.JPG не существует в каталоге. (X здесь может быть любой строкой.) Я не знаю, как это сделать, кроме как вручную.
Более общая ситуация — когда вы хотите найти все файлы в каталоге A, которые также существуют в каталоге B. (Первую задачу можно превратить во вторую с помощью mmv
.)
решение1
Вы можете использовать функции подстановки параметров оболочки ${var%ext}
, чтобы удалить исходное расширение для каждого файла: для иллюстрации
touch file{1..6}.NEF file{1,2,4,6}.JPG
Затем
for nef in *.NEF; do [[ -f "${nef%.NEF}.JPG" ]] || echo rm -- "$nef"; done
результаты в
rm -- file3.NEF
rm -- file5.NEF
Объяснение:
Первая команда просто создает 6 пронумерованных .NEF
файлов и соответствующие файлы для 3 из них, т.е. просто несколько пустых файлов для проверки второй команды.file1.NEF
file6.NEF
.JPG