回答:
#!/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てこれを達成することを意味しますか?