Получить только имя файла из команды find и почты

Следующая команда find выдаст несколько файлов и отправит почту всем этим

find /home/cde -ctime -1 -name "Sum*pdf*" -exec uuencode {} {} \; |mailx -s "subject" abc@gmail.com 

Но я получаю вложения, такие как homecdeSum123.pdf и homecdeSum324.pdf . Как получить точные имена файлов в моем приложении.

Если я правильно понимаю, вы хотите, чтобы вложения имели имя файла, например Sum123.pdf вместо homecdeSum123.pdf . Я предполагаю, что последнее имя создается вашей почтовой программой, которая удаляет косые черты в имени пути при сохранении.

Я думаю, вы должны использовать другой способ вызова uuencode , удалив имя пути по второму параметру:

 find /home/cde -ctime -1 -name "Sum*pdf*" | while read name; do uuencode "$name" "${name##*/}" | mailx -s "subject" abc@example.com; done 

Это отправит отдельную почту для каждого файла. Часть ${name##*/} принимает переменную $name , удаляет все до последней косой черты и возвращает результат.

Если вы хотите отправить все файлы в одну почту, просто mailx до mailx часть mailx :

 find /home/cde -ctime -1 -name "Sum*pdf*" | while read name; do uuencode "$name" "${name##*/}"; done | mailx -s "subject" abc@example.com 

Попробуйте это oneliner

 find /home/cde -ctime -1 -name "Sum*pdf*" | uuencode files.txt | mailx -s "subject" abc@gmail.com