
.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=//gp
values=
答え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
)を削除してもう一度やり直してください。