バックアップスクリプトは拡張子ごとにファイルをコピーします。

バックアップスクリプトは拡張子ごとにファイルをコピーします。

.pngあるディレクトリから別のディレクトリにファイルをコピーするスクリプトを作成しました。スクリプトは次のとおりです。

i="`cat /usr/local/app1/default.conf | grep -i values | sed -e 's/\values=//g' -e 's/,/ /g'`"
for data in $i
do
cp -rvp /usr/local/dir1/$data.png /home/user1/dir1
done

上記のスクリプトを実行すると、ファイルがからにdir1コピーされますが、/home/user/dir1最後に次のエラーが発生します。

cp: cannot stat ‘/usr/local/dir1/wasw\r.png’: No such file or directory

内容は次のとおりですdefault.conf

 values= wads sead seda okaw wasw

コマンドはcp「wads」、「sead」などの値を取得しますが、最終的に上記のエラーが発生します。

答え1

現在持っているのと同じコードを維持するには、次のsedコードをさらに使用することをお勧めします。

i="`sed -n 's/'$'\r''//;s/,/ /g;s/values=//gp' /usr/local/app1/default.conf`"
for data in $i; do
    cp -rvp /usr/local/dir1/$data.png /home/user1/dir1
done

仕組み:

  • この-nフラグはsed自動的に行を印刷しないように指示します。
  • このs/$'\r'//ステートメントは、\r問題を引き起こす可能性がある文字を削除します。
  • pステートメントの末尾に追加されるのは、置換時にのみバッファを印刷します(行に存在する場合のみ)。s/values=//gpvalues=

答え2

実際、私はあなたのユースケースを理解していませんが、ある.pngディレクトリでファイルを見つけてそのファイルを別のディレクトリにコピーしようとしていることを理解しています。あなたのユースケースの私の理解が正しい場合は、次のコマンドが役に立ちます。

find /home/your/source/path/ -name \*.png -exec cp {} /home/your/destination/path/ \;

答え3

おそらく、Windowsコンピュータでdefault.confファイルを編集してコピーしたでしょう。行末の改行文字の前に追加文字があるようです。努力するod -c default.conf。次のような結果が得られます。

0000000   v   a   l   u   e   s   =       w   a   d   s       s   e   a
0000020   d       s   e   d   a       o   k   a   w       w   a   s   w
0000040 022  \n
0000042

ファイルを編集して022文字(たとえば\r)を削除してもう一度やり直してください。

関連情報