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

そのためには、 に渡される 2 番目の引数を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

関連情報