У меня есть набор папок и набор *.DAT
файлы.
Я хочу удалить *.DAT
файл, если нет папки с тем же именем (без .DAT
) существует.
Мне понадобилось некоторое время, чтобы прийти к этому решению:
find . -type d > dirs.txt
for F in `find *.DAT`
do
F=$(sed 's|\.DAT||g' <<< $F)
if grep "$F" dirs.txt; then
echo "$F found"
else
rm $F.DAT
fi
done
Но я чувствую, что должно быть гораздо более простое решение (элегантный однострочный без создания файла? ...?). Я прав?
Ответы:
Вам не нужно использовать
sed
удалить.DAT
если вы используетеbash
: расширение встроенного параметра${F%.DAT}
достигает того же самого без использования подоболочки и внешней программы.Если каталоги были в произвольных местах относительно
.DAT
файлы, то файл списка каталогов является наиболее эффективным способом ее решения, но, учитывая, что оба находятся в одном месте, гораздо более простой ответ:Обратите внимание, что это будет обрабатывать имена файлов со встроенными пробелами, чего нет в вашем решении.
Для других оболочек можно использовать аналогичную технику, но я не могу говорить за них.
источник