「echo」で取得した出力は、端末に貼り付けるとコマンドとして機能しますが、スクリプト内では機能しません。

「echo」で取得した出力は、端末に貼り付けるとコマンドとして機能しますが、スクリプト内では機能しません。

残念ながら、多くの場合、スペースを含むアプリケーションによって生成されたファイルを変更しようとします。端末にコピーして貼り付けると、動作する出力を提供するために「エコー」が得られましたが、コマンドを実行しようとすると機能しません。私が探していますこれ答え、以前は役に立ちましたが、この場合は "${x}"構文も機能しないようです。

#!/bin/sh
cd ~/Data
IFS=$'\n';for i in $(ls); do
    echo "$i";
    filename="$i"
    date=$(date -n +%Y-%m-%d)
    new_filename="$date$filename"
    echo mv \'"${filename}"\' \'"${new_filename}"\'
    mv \'"${filename}"\' \'"${new_filename}"\'
done;

ベストアンサー1

主な問題は、出力lsコマンドを繰り返すことです。グローブを使う*

#!/bin/sh
cd ~/Data
for i in *; do
    echo "$i"
    filename="$i"
    date=$(date -n +%Y-%m-%d)
    new_filename="${date}${filename}"
    echo mv "${filename}" "${new_filename}"
    mv -- "${filename}" "${new_filename}"
done

また、名前を正しく処理する--ために追加しました。しかし、私のコマンドにはオプションはありませんが、別のバージョンがある可能性があるため、そのままにしておきます。mv-date-n

おすすめ記事