shスクリプトを実行するとファイルが見つかりません

shスクリプトを実行するとファイルが見つかりません

私は現在、いくつかのタスクを自動化するためにシェルスクリプトを使用しています(ファイルをコピーして「変更された日付」を保持)。シェルですべてのコマンドをテストしましたが、スクリプトで実行すると正しく機能しません。

シェルで実行すると、適切な結果が得られます。

$> filename=/home/root/data/ABCD1234/20170123-231000.wav
$> echo "$filename"
/home/root/data/ABCD1234/20170123-231000.wav
$> cdate=$(date +%Y%m%d%H%M.%S -r $filename)
$> echo $cdate
201701232310.00
$> cp $filename $filename.bck 
touch -t $cdate $filename.bck

しかし、次のスクリプトを実行すると:

#!/bin/bash

# list desired files
files=$(find /home/root/data/ABCD1234/*)

# iterate over every file found
for filename in $files
do
    echo "$filename"
    cdate=$(date +%Y%m%d%H%M.%S -r $filename)
    echo $cdate
    cp $filename $filename.bck 
    touch -t $cdate $filename.bck
done

exit 0

次の出力を取得します(このフォルダに2つのファイルがあるとします)。

/home/root/data/ABCD1234/20170123-231000.wav
': No such file or directory/data/ABCD1234/20170123-231000.wav

/home/root/data/ABCD1234/20170123-231500.wav
': No such file or directory/data/ABCD1234/20170123-231500.wav

PS:私はARAGOディストリビューションを使用しており、ほとんどのシェルコマンドはBusyBoxにリダイレクトされます。

PS:元のスクリプトは実際にファイルをコピーしていないので、cpコマンドにタイムスタンプを残しても問題は解決しませんでした。

ベストアンサー1

問題は$files変数参照にあります。すべてのファイル名を割り当てますすぐに到着するfilename

*.wavのファイルにのみ興味がある場合は、/home/root/data/ABCD1234/次のことができます。

for filename in /home/root/data/ABCD1234/*.wav
do
    echo "$filename"
    cdate="$( date +%Y%m%d%H%M.%S -r "$filename" )"
    echo "$cdate"
    cp "$filename" "$filename.bck"
    touch -t "$cdate" "$filename.bck"
done

使用find:

/home/root/data/ABCD1234/ 検索  その他のオプション  |
読み込み中に-rファイル名。
  #以前のようにループ
完璧

おすすめ記事