Created
March 5, 2011 08:45
-
-
Save gavingc/856236 to your computer and use it in GitHub Desktop.
YouTubeMonitorAndUpload
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# Uses 'inoticoming' to efficiently monitor a directory and call an upload script. | |
# | |
# Usage: | |
# Remember to set the variables at the top of the script files. | |
# Can be run directly or at startup by adding lines to /etc/rc.local (Debian) example: | |
# sudo -b -u www-data /path/to/YouTubeMonitor.sh MONITOR_DIR COMPLETE_DIR [PLAYLIST_ID] | |
# Add one monitor line per directory/playlist. | |
# Now simply drop files into the monitored directory and they will be uploaded, named, tagged and playlisted. | |
# | |
# MONITOR_DIR might be an ftp, webdav or any directory. | |
# | |
# Depends on: | |
# - http://code.google.com/p/youtube-upload/ (download) | |
# - python-gdata (apt-get install) | |
# - inoticoming (apt-get install) | |
# - YouTubeUpload.sh (supplied) | |
## Set these variables. | |
UPLOAD_SCRIPT=/path/to/YouTubeUpload.sh | |
MONITOR_SCRIPT=/path/to/YouTubeMonitor.sh | |
## Command line args. | |
MONITOR_DIR="$1" | |
COMPLETE_DIR="$2" | |
PLAYLIST_ID="$3" | |
## To find UID: cat /etc/passwd |grep www-data | |
## You may disable this block if you don't want this protection. | |
## But seriously don't run as root! | |
if [ $UID != "33" ]; then | |
echo "Do NOT run this script as root!" | |
echo "Put something like this in /etc/sudoers:" | |
echo "%www-data ALL=(www-data) SETENV: NOPASSWD: $MONITOR_SCRIPT" | |
echo "" | |
echo "Then try: 'sudo -b -u www-data $MONITOR_SCRIPT'" | |
exit 1 | |
fi | |
if [ $# -lt 2 ] ; then | |
echo "Usage: $0 MONITOR_DIR COMPLETE_DIR [PLAYLIST_ID]" | |
echo "" | |
echo "MONITOR_DIR is the directory to monitor." | |
echo "COMPLETE_DIR is the directory to move the file to." | |
echo "[PLAYLIST_ID] is optional and the playlist to add the uploaded file to" | |
exit 1 | |
fi | |
if [ ! -d "$MONITOR_DIR" ] ; then | |
echo "$MONITOR_DIR: is not a directory" | |
exit 1 | |
fi | |
if [ ! -d "$COMPLETE_DIR" ] ; then | |
echo "$COMPLETE_DIR is not a directory" | |
exit 1 | |
fi | |
# inoticoming dir_to_monitor chdir dir action_to_call $1=dir $2=dest_dir $3=file $4=playlist_id | |
inoticoming "$MONITOR_DIR" --chdir "$MONITOR_DIR" "$UPLOAD_SCRIPT" "$MONITOR_DIR" "$COMPLETE_DIR" "{}" "$PLAYLIST_ID" \; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# Upload video file to YouTube using youtube_upload.py | |
# | |
# Usage: | |
# Can be run directly or via YouTubeMonitor.sh | |
# Remember to set the variables at the top of the script files. | |
# Set rwx permissions: chmod 0750 ./YouTube* | |
# Set group: chown :www-data ./YouTube* | |
# | |
# Depends on: | |
# http://code.google.com/p/youtube-upload/ (download) | |
## Set these variables. | |
LOG_FILE=/path/to/YouTubeUpload.log | |
PYTHON_UPLOADER=/path/to/youtube_upload.py | |
UPLOADER_OPTS="--no-split" | |
[email protected] | |
LOGIN_PASS=MyPass | |
DESC="" | |
CATEGORY="Tech" | |
TAGS="tag1,tag2" | |
## Command line args. | |
UPLOAD_DIR="$1" | |
COMPLETE_DIR="$2" | |
UPLOAD_FILE="$3" | |
PLAYLIST_ID="$4" | |
## To find UID: cat /etc/passwd |grep www-data | |
## You may disable this block if you don't want this protection. | |
## But seriously don't run as root! | |
if [ $UID != "33" ]; then | |
echo "Do NOT run this script as root!" | |
echo "Put something like this in /etc/sudoers:" | |
echo "%www-data ALL=(www-data) SETENV: NOPASSWD: $PYTHON_UPLOADER" | |
echo "" | |
echo "Then try: 'sudo -b -u www-data $0'" | |
exit 1 | |
fi | |
if [ $# -lt 3 ] ; then | |
echo "Usage: $0 UPLOAD_DIR COMPLETE_DIR UPLOAD_FILE [PLAYLIST_ID]" | |
echo "" | |
echo "UPLOAD_DIR is the directory upload from." | |
echo "COMPLETE_DIR is the directory to move the file to." | |
echo "UPLOAD_FILE is the file to upload." | |
echo "[PLAYLIST_ID] is optional and the playlist to add the uploaded file to" | |
echo "PLAYLIST_ID can be found at http://gdata.youtube.com/feeds/api/users/USERNAME/playlists" | |
echo "Play list URI can be checked at http://gdata.youtube.com/feeds/api/playlists/PLAYLIST_ID" | |
exit 1 | |
fi | |
if [ ! -d "$UPLOAD_DIR" ] ; then | |
echo "$UPLOAD_DIR: is not a directory" | |
exit 1 | |
fi | |
if [ ! -d "$COMPLETE_DIR" ] ; then | |
echo "$COMPLETE_DIR is not a directory" | |
exit 1 | |
fi | |
if [ ! -f "$UPLOAD_DIR/$UPLOAD_FILE" ] ; then | |
echo "$UPLOAD_FILE: is not a file" | |
exit 1 | |
fi | |
if [ -n "$PLAYLIST_ID" ] ; then | |
UPLOADER_OPTS="$UPLOADER_OPTS --playlist-uri=http://gdata.youtube.com/feeds/api/playlists/$PLAYLIST_ID" | |
fi | |
echo "" >> "$LOG_FILE" | |
date >> "$LOG_FILE" | |
## Test PYTHON_UPLOADER by logging returned YouTube categories. | |
#python "$PYTHON_UPLOADER" -c >> "$LOG_FILE" 2>&1 | |
echo "Uploading file: $UPLOAD_FILE." >> "$LOG_FILE" | |
python "$PYTHON_UPLOADER" $UPLOADER_OPTS "$LOGIN_EMAIL" "$LOGIN_PASS" "$UPLOAD_DIR/$UPLOAD_FILE" "${UPLOAD_FILE%.*}" "$DESC" "$CATEGORY" "$TAGS" >> "$LOG_FILE" 2>&1 | |
echo "Moving file." >> "$LOG_FILE" | |
mv "$UPLOAD_DIR/$UPLOAD_FILE" "$COMPLETE_DIR/" >> "$LOG_FILE" 2>&1 | |
echo "Finished." >> "$LOG_FILE" |
I saw that there is no real Google Drive Sync for linux (except proprietary) , I really need to sync a folder. I installed and configured rclone, and I was wondering if I can use inoticoming to trigger sync events.
I already use inoticoming to print (lpr) Pdf files, that my wife needs for her business. She saves them as pdf in a watched folder, and that triggers the print command.
^Nice Code !
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Fair enough, except for the prevention with "set -e":
http://mywiki.wooledge.org/BashPitfalls
"Some people also like to enable set -e to make their scripts abort on any command that returns non-zero, but this can be rather tricky to use correctly (since many common commands may return a non-zero for a warning condition, which you may not want to treat as fatal)."
This seems a pretty weak argument to me. It's like saying "this mechanism will fail on 1% of the cases, so let's not use it at all" :-) yeah, I know, false sense of security is also dangeous, but still...
You can have the best of two worlds: set -e + check the return of commands.