Приветствую!
Написал такую конструкцию:
find -maxdepth 1 -type f -regex '.*\(jpg\)' | grep -oE '[^/]+.$' | cut -d'.' -f1 > /tmp/JPG_F
find .. -maxdepth 1 -type f -regex '.*\(pp3\|CR2\)' | grep -oE '[^/]+.$' | cut -d'.' -f1 > /tmp/CR2_F
grep -vFf /tmp/JPG_F /tmp/CR2_F > /tmp/RM_Files.txt
old_IFS=$IFS; IFS=$'\n'
for RM in $( </tmp/RM_Files.txt ); do rm ../$RM* > /dev/null 2>&1; done
IFS=$old_IFS
Смысл в том, что:
1) ищутся в текущей директории файлы с расширением jpg, затем записываются в файл только имена
2) ищутся в директории на уровень выше файлы с расширением pp3 и CR2, затем записываются в файл только имена
3) выявляются на основе первого файла «лишние» файлы во втором каталоге (несовпадающие с именами в первом), затем записываются в файл
4) удаляются файлы из созданного списка отличий
Чего хочется - уйти от перенаправлений в файлы. Что-то вроде
1) тут понятно -
A=`find -maxdepth 1 -type f -regex '.*\(jpg\)' | grep -oE '[^/]+.$' | cut -d'.' -f1`
2) тут понятно -
B=`find .. -maxdepth 1 -type f -regex '.*\(pp3\|CR2\)' | grep -oE '[^/]+.$' | cut -d'.' -f1`
3) вот тут засада, понимаю что бред, но смысл -
C=`grep -vFf «$A» «$B»`
4) ну и
old_IFS=$IFS; IFS=$'\n'
for RM in $С; do rm ../$RM* > /dev/null 2>&1; done
IFS=$old_IFS
Спасибо за любую помощь!
bash