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

おすすめ記事