Извлечь имя файла из команды find

Извлечь имя файла из команды find

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

Пример: dir=/home/as123/billи filename=abc.pdf.Zя получаю привязанность как

homeas123billabc.pdf.Z

find $dir -ctime -1 -type f -name "abc*pdf*" -exec basename {} \; -exec uuencode {} {} \; | mailx -s "north" [email protected]

printfне установлен на моем компьютере, без него как написать свой скрипт, чтобы получить только имя файла в качестве вложения?

решение1

Я подозреваю, что вы имеете в виду, что хотите, чтобы имя файла было включено в uuencodeвывод:

begin 644 path/to/the/file.pdf.Z
%=&5S=`H`
`
end

не включать path/to/the.

Для этого вам нужно, чтобы второй переданный аргумент uuencodeбыл базовым именем. Для этого вам нужно сделать так:

find "$dir" -ctime -1 -type f -name "abc*pdf*" -exec sh -c '
  for file do
    uuencode "$file" "$(basename "$file")"
  done' sh {} +

Или если вы findподдерживаете -execdir:

find "$dir" -ctime -1 -type f -name "abc*pdf*" -execdir uuencode {} {} \;

Если бы вы findподдержали -printf, вы бы могли сделать это с помощью:

find "$dir" -ctime -1 -type f -name "abc*pdf*" -printf '%p\0%f\0' |
  xargs -r0n2 uuencode

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