ファイルが存在し、ファイル名がエスケープされている場合はBashでテストしています。$(printf '%q' "$ FNAME") これは常に以下のコメントされた例のように[-f $ FNAME]の場合、を使用してエラーが発生します。スペースやその他の文字を含むファイル名をテストするにはどうすればよいですか?Bash - ファイル名に空白が含まれているかどうかを確認する
#!/usr/bin/env bash
# code used in Raspberry Pi Podcasting Jukebox project
# youtube-dl -f 17 --get-filename https://www.youtube.com/watch?v=AgkM5g_Ob-w
# returns "HOW ABUNDANCE WILL CHANGE THE WORLD - Elon Musk 2017-AgkM5g_Ob-w.3gp"
# Purpose: To test if file exists before downloading
# for testing purposes using an existing regular file "abc def ghi"
AFILE="abc def ghi"
TFILE=$(printf '%q' "$AFILE") # Escaping filename using printf
echo $TFILE # returns abc\ def\ ghi
# if [ -f $AFILE ] # this test returns false every time with error [:too many arguments
if [ -f $TFILE ] # This test also returns FALSE with err [: too many arguments
then
echo "Existing"
# don't download
else
echo "Not existing"
# youtube-dl http://www.youtube.com/watch?v=AgkM5g_Ob-w
fi
EDIT:この質問を解決するには、必ずファイル名、エスケープ用%q
を使用してのアイデアを引用し、[[]]
[Bashとファイル名の空白]の可能な複製(https://stackoverflow.com/questions/1574898/bash-and-filenames-with-spaces) –
はい、同様の質問ですが、[スペースとBashとファイル名] [https://stackoverflow.com/questions/1574898/bash-and-filenames-with-spaces]には、テストをBashで[[]]を通して式を指定する特定の問題の解決策が含まれていません – casperl