ホームディレクトリのないユーザーを誤ってシステムに追加しました(useraddに-dフラグと-mフラグを入れるのを忘れました)。ユーザーを削除して最初からやり直すのではなく、単にホームディレクトリをmkdirして、/ etc/skelから自分でファイルをコピーしようとしました。ただし、次の奇妙なエラーが発生しました。
user@Host:~$ Sudo cp -rv /etc/skel/* /home/newuser/
cp: cannot stat `/etc/skel/*': No such file or directory
ただし、次の2つのコマンドは期待どおりに機能します。
user@Host:~$ Sudo cp -rv /etc/skel/.bashrc /home/newuser/
user@Host:~$ cp -rv ~/testfolder1/* /testfolder2/
私がその最初のエラーを受け取った理由を誰かが明らかにすることができますか?.
/ etc/skelディレクトリには通常、隠しファイル、つまり名前がピリオドで始まるファイルのみが含まれます。 *
のシェル拡張には、オプションが設定されていない限り、隠しファイルは含まれません。 bashの場合、このオプションはshopt -s dotglob
で設定されます。
あなたの場合、/etc/skel/*
は何にも展開されていないため、シェルは引数を/etc/skel/*
のままにしますが、その名前のファイルはありません。
グロブ式の場合(/etc/skel/*
)はnoファイルに展開され、デフォルトでは、式はコマンドにプレーン文字列として残されます。この場合、/ etc/skel内のすべてのファイルがドットファイルであるため、ファイルなしに展開されます。そのため、/ etc/skel内のリテラルファイル「*」をコピーしようとしましたが、そのファイルは存在しません。
http://www.gnu.org/software/bash/manual/bashref.html#Filename-Expansion を参照してください。