現在のコードでは、反パターンや誤解がたくさんあります。
cd /home/pi/Documents
これが成功したかどうかをテストする必要があります。おそらく現在問題はないかもしれませんが、そうすることは害ではありません。
echo $PWD
ここに引用符がありませんが、それは致命的ではありません。
for _file in /media/pi/*/*.mp4; do
clean=$(echo $_file|wc -m)
これは、文字列の文字数をカウントする方法ではありません。代わりにclean=${#_file}
を使用してください。
if [ $clean -gt 15 ]; then
ここで、グロブが何かにマッチしているかどうかを知りたいと思います。それは進行する方法ではありません。 Bashのshopt -s nullglob
オプションを使用するか、if [ -e "$_file" ]; then
を使用して、グロブが実際のファイルと一致するかどうかを確認します。
did=$(grep "$_file" /home/pi/Documents/uploaded_videos.txt | wc -l)
if [ $did = 0 ]; then
これは、ファイルに文字列が含まれていないかどうかを確認する方法です。代わりにif ! grep -q "$_file" /home/pi/Documents/uploaded_videos.txt; then
を使用してください。
#Edit this to your liking
#echo "now uploading $_file"
args="--file=\"${_file}\" –-title=\"${_file}\" –-description=\"show 2018\" -–keywords=\"2018,show, Winter,show 2018,\" -–category=\"28\" -–privacyStatus=\"private\""
ここでは、シェルがコマンドを読み取る方法について誤解があります。引用の削除は変数展開の前に行われるため、引用が間違っています。通常、配列を使用したいと思っています!それはBash配列のためのものです!またここにいくつかの奇妙なハイフンがあることに注意してください。ここで
python yt_up.py "$args"
echo $_file uploaded to youtube via google developer api | logger
echo $_file >> /home/pi/Documents/uploaded_videos.txt
fi
fi
done
はあなたの過ちを修正する(そして、できればそれを動作させる)可能性です:
#!/bin/bash
# We define a variable with the path to the uploaded_videos.txt file
uploaded_videos=/home/pi/Documents/uploaded_videos.txt
# Will expand non-matching globs to nothing:
shopt -s nullglob
# cd into the directory, and exit if fails
cd /home/pi/Documents || exit
# Use the builtin pwd instead of echo "$PWD"
pwd
for file in /media/pi/*/*.mp4; do
if ! grep -qFx "$file" "$uploaded_videos"; then
# Define an array to contain the arguments to pass
args=(
--file="$file"
--title="$file"
--description="show 2018"
--keywords="2018,show, Winter,show 2018,"
--category="28"
--privacyStatus="private"
)
# call your script with the fields of the array as arguments
python yt_up.py "${args[@]}"
echo "$file uploaded to youtube via google developer api" | logger
echo "$file" >> "$uploaded_videos"
fi
done
あなたが明示的にyt_up.py
が成功したかどうかをチェックすることにより、最終工程改善することができます:
if python yt_up.py "${args[@]}"; then
echo "$file uploaded to youtube via google developer api" | logger
echo "$file" >> "$uploaded_videos"
else
echo "Something wrong happened!"
fi
をあなたの場合を'import sys'と' print str(sys.argv) 'を実行するpythonスクリプトを呼び出します。出力はどのように見えますか? – Ronald
どこからyt_up.pyを取得しましたか? – quamrana
'args =" - file = \ "$ {_ file} \" --title = \ "$ {_ file} \" --description = \ "show 2018 \" --keywords = \ " "2018、show、Winter、show 2018、\" --category = \ "28 \" --privacyStatus = \ "private \" "' - file = \ "$ {_ file} \" = '' --'の代わりに - - – mbieren