回答:
#!/bin/bash
IFS=$'\n'
find ~/Desktop -mindepth 1 -depth | while read f; do
new="$(dirname "$f")/$(basename "$f" | sed 's/ *$//')"
[[ "$f" != "$new" ]] && mv "$f" "$new"
done
IFS=$'\n'
では、f
読み取られる変数に| while read f
は先頭または末尾のスペースがありませんsed 's/ *$//'
するsed 's/^ *//;s/ *$//
と、先頭からスペースも削除されます's/^ *//;s/ *$//'
また、先頭のスペースを削除します。つまりIFS=$'\n'
、読み取られるf変数while read f
がなければ、末尾または先頭にスペースがないことになります。
IFS=$'\n'
または何かの後にセミコロンがありませんでしたか?コマンドが見つからないというエラーは、スクリプトがパスにない場合ではscript.sh
なく、スクリプトを実行しようとしたことが原因である可能性があり./script.sh
ます。
sudo ./script.sh
、cl IFS=$'\n'; for d in {1..9}; do find ~/test -name '* ' -depth $d | while read f; do mv "$f" "$(sed 's/ *$//' <<< "$f")" done done
でもエラーはありませんでしたが、ハングしてプロンプトに戻らなかったため、スクリプトを実行しています。
$'\n'
し| while read
てこれを達成することを意味しますか?