Как обнаружить файлы с одинаковым именем, но разными расширениями?

Как обнаружить файлы с одинаковым именем, но разными расширениями?

У меня есть каталог, файлы которого имеют расширение .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.NEFfile6.NEF.JPG

Связанный контент