web-dev-qa-db-ja.com

検索コマンドからファイル名を抽出します

ファイル名を抽出してメールに添付しようとしています。しかし、私がメールを送るとき、添付ファイルはパス名とファイル名で来ています。

例: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
Aravind

uuencode出力に含まれるファイル名が必要だと思います。

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

path/to/theを含めないでください。

そのためには、uuencodeに渡される2番目の引数をベース名にする必要があります。そのためには、次のようにする必要があります。

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
3