Разница в аргументе cp -R?

Да, я хочу отправить автоматическое электронное письмо, прикрепив файл без SMTP сервера

В этом случае я бы использовал Python (и h сделано в прошлом, правда, не с навесным оборудованием). Отправка электронной почты с помощью Python - это всего лишь пара import .

Вот один пример, который я быстро собрал только что, используя адрес Gmail:

#!/usr/bin/env python3

import smtplib
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

# Your login credentials
sender = "you@gmail.com"
emailPasswd = "yourpassword"

# Who are we sending to
receiver = "whoever@someplace.com"

# The path to the file we want to attach
fileToAttach = "att.txt"

msg = MIMEMultipart()
msg['Subject'] = "Here's an e-mail with attachment"
msg['From'] = sender
msg['To'] = receiver
body = "Mail with attachment"
bodyText = MIMEText(body, "plain")

# Now we try to add the attachment
try:
    att = open(fileToAttach)
    attachment = MIMEText(att.read())
    attachment.add_header('Content-Disposition', 'attachment', filename=fileToAttach)
except IOError:
    print("Could not add attachment {}".format(fileToAttach))
    exit(1)

# "Attach" both the attachment and body to 'msg'
msg.attach(bodyText)
msg.attach(attachment)

# Connect and send e-mail
server = smtplib.SMTP("smtp.gmail.com", 587)
server.ehlo()
server.starttls()
server.login(sender, emailPasswd)
server.sendmail(sender, receiver, msg.as_string())
server.quit()

Это работает, но только после того, как вы сделаете это .Если вы не разрешите «менее безопасным приложениям получать доступ к вашей учетной записи [Gmail]», вы не сможете войти в систему с помощью скрипта. Вместо этого вы получите SMTPAuthenticationError (код ошибки 534 ). См. здесь для хорошей справки.

Теперь, возможно, излишне напоминать, но я все равно сделаю это; мой небольшой фрагмент кода выше работает для вложений txt . Например, если вы хотите прикрепить изображение, вам нужно будет импортировать соответствующий модуль: from email.mime.image import MIMEImage

Кроме того, если вы не хотите «жестко кодировать» прикрепленный файл, вы можете просто передать его как аргумент. Если сценарий называется ./ pySmtp.py , назовите его так:

./pySmtp.py att.txt

Если да, измените код на этот:

#!/usr/bin/env python3

import sys
import smtplib
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

# Your login credentials
sender = "you@gmail.com"
emailPasswd = "yourpassword"

# Who are we sending to
receiver = "whoever@someplace.com"

# The path to the file we want to attach
fileToAttach = sys.argv[1]

[rest of code stays the same]

Что касается «автоматической» части, вам нужно будет выбрать что сами в зависимости от ваших потребностей.

2
04.07.2018, 21:29
2 ответа

Единственное отличие состоит в том, что первая команда,

cp -R /a/. /b

скопирует скрытые файлы и каталоги из /aв /b, а вторая команда

cp -R /a/* /b

не стал бы этого делать.

Причина того, что вторая команда не копирует скрытые файлы, заключается в том, что *заменяется на все не -скрытые имена в /a(, если только параметр оболочки dotglobне установлен в bashили эквивалентный опция в любой используемой оболочке, если она доступна ).


В исходном вопросе во второй команде использовалось -rвместо-R:

Флаг -rсохраняется в некоторых реализацияхcp(GNU cp, например )для обратной совместимости. Это нестандартный флаг -для команды cp, и в реализации, в которой он есть, он аналогичен на -R.

В GNU и AIX cp, -rи -Rодинаковы. В некоторых исторических реализациях cpспециальные файлы, такие как FIFO и сокеты, обрабатываются по-разному. Реализация cp -r/-Rв Solaris отличается только тем, что FIFO(-Rвоссоздает их, -rчитает из них ). Ни одна из бесплатных BSD не имеет -rв своих реализациях cp.

2
27.01.2020, 22:17
cp -R

копирует рекурсивно и копирует исходный тип файла. Это единственный рекурсивный метод, упомянутый в стандарте POSIX.

cp -r

— исторический вариант рекурсивного копирования. Он открывает все файлы и читает содержимое, а затем создает простые файлы с прочитанным содержимым. Это исторический рекурсивный вариант UNIX. Он может быть недоступен в современных реализациях.

См.http://pubs.opengroup.org/onlinepubs/9699919799/utilities/cp.htmlсправочную страницу POSIX.

-1
27.01.2020, 22:17

Теги

Похожие вопросы