一部のファイルをあるフォルダから別のフォルダに移動するスクリプトを作成しましたが、次のエラーが発生します。 2つのフォルダを確認したところ、1つのフォルダにはそのファイルがあり、他のフォルダにはそのファイルがないことがわかりました。しかし、すべてのフォルダに表示されるのはなぜですか? 「mvはそのようなファイルやディレクトリを計算できません」
mv: cannot stat `/home/esolve/project/capture/tcp_50x50/dest_folder/194.199.68.165_tcp.folder/data/*': No such file or directory
mv: cannot stat `/home/esolve/project/capture/tcp_50x50/dest_folder/194.42.17.124_tcp.folder/data/*': No such file or directory
mv: cannot stat `/home/esolve/project/capture/tcp_50x50/dest_folder/195.113.161.13_tcp.folder/data/*': No such file or directory
mv: cannot stat `/home/esolve/project/capture/tcp_50x50/dest_folder/203.159.127.3_tcp.folder/data/*': No such file or directory
mv: cannot stat `/home/esolve/project/capture/tcp_50x50/dest_folder/212.199.61.205_tcp.folder/data/*': No such file or directory
mv: cannot stat `/home/esolve/project/capture/tcp_50x50/dest_folder/212.51.218.235_tcp.folder/data/*': No such file or directory
mv: cannot stat `/home/esolve/project/capture/tcp_50x50/dest_folder/213.73.40.105_tcp.folder/data/*': No such file or directory
mv: cannot stat `/home/esolve/project/capture/tcp_50x50/dest_folder/41.225.7.4_tcp.folder/data/*': No such file or directory
mv: cannot stat `/home/esolve/project/capture/tcp_50x50/dest_folder/83.230.127.122_tcp.folder/data/*': No such file or directory
[esolve@kitty tcp_50x50]$ ls /home/wgong/project/capture/tcp_50x50/dest_folder/194.199.68.165_tcp.folder/
[esolve@kitty tcp_50x50]$ ls /home/wgong/project/capture/tcp_50x50/dest_folder/203.159.127.3_tcp.folder/data/
129.88.70.226 132.187.230.1 138.96.116.22 155.185.54.250 192.38.109.144 193.136.227.163 193.175.135.61 195.113.161.13 83.230.127.122
130.104.72.200 132.227.62.122 147.83.29.232 156.17.10.52 192.42.43.22 193.137.173.218 193.205.215.74 212.199.61.205
131.130.69.164 132.252.152.194 148.81.140.193 157.181.175.249 192.43.193.71 193.144.21.131 193.226.19.30 212.51.218.235
131.188.44.102 134.151.255.180 152.66.245.162 160.78.253.31 193.1.170.136 193.145.46.243 194.199.68.165 213.73.40.105
131.254.208.10 138.48.3.203 152.81.47.4 192.114.4.3 193.136.166.56 193.166.160.98 194.42.17.124 41.225.7.4
スクリプトは次のとおりです。
list=`ls dest_folder`
cd dest_folder
cwd=`pwd`
for folder in $list;do
mv ${cwd}/${folder}'/data/*' ${cwd}/${folder}
done
私はそれを走った/home/esolve/project/capture/tcp_50x50/
。
ベストアンサー1
mv ${cwd}/${folder}'/data/*' ${cwd}/${folder}
そこにある引用符()'
は、シェルがワイルドカードを使用するのを防ぎます。コマンドはそのまま渡されますが、表示され*
たディレクトリに呼び出さmv
れたファイルが見つからないため失敗します。*
次に変更してください。
mv "${cwd}/${folder}/data"/* "${cwd}/${folder}"
(ディレクトリ名にスペースが含まれている場合は、問題を回避するために二重引用符を使用してください。*
引用符の外側。)
ただし、空のディレクトリではまだエラーが発生します。 (同じ理由:ファイルがパターンと一致するものを見つけられない場合は、パターン自体をコマンドに引数として渡します。)