一部のシーケンシャル操作(一部のコピー、暗号化、アップロード、および単純な論理チェック)を実行するために(最初に)bashシェルスクリプトを作成しようとしたときに返されるfind
文字列が原因で問題が発生しています。特殊文字/\*)'("
とスペースがあります。
を使用してこの問題を解決するための提案を見ましたが、printf %q
正しいbash構文が見つかりませんでした。
以下は、文字列を変更する方法の抜粋です。
#!/bin/sh
find "/upload" -type f |
while read -r path; do
fixedpath=printf %q "$path"
fixedpath=printf '%q' "$path"
fixedpath=printf '%q' $path
fixedpath=printf "%q" "$path"
fixedpath="printf %q $path"
fixedpath="printf '%q' $path"
fixedpath=$(printf '%q' $path)
echo $path >> list.txt
echo $fixedpath >> list.txt
done
exit 0
この関数を作成する6〜12の異なる方法を考えることができますがprintf
、他のコマンドにパラメータとして渡すために有効なパスを返すにはどのような方法を使用する必要がありますか?
Ubuntu 16で働いています。
ベストアンサー1
find
特に奇妙でクールなファイル名を期待している場合は、出力を解析しないでください。
代わりに実行する必要があるコマンドを実行する-exec
か、コマンド自体にスクリプトを挿入しますfind
。
find /upload -type f -exec sh -c '
for pathname do
printf "Would do something with \"%s\" here...\n" "$pathname"
done' sh {} +
もちろん、インクルードスクリプトを独自のファイルに入れることもできます。
#!/bin/sh
for pathname do
printf 'Would do something with "%s" here...\n' "$pathname"
done
それから...
find /upload -type f -exec /path/to/script.sh {} +
このトピックに関する追加資料: