問題の1つは、コマンド置換の前後に二重引用符を入れなかったため、date
コマンドからの出力がスペースで分割されたことです。シェルスクリプトが空白文字やその他の特殊文字で詰まるのはなぜですか?をご覧ください。これは有効なコマンドです。
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%m-%d-%y-%r")"
元のファイル名に追加する場合は、変数に含める必要があります。
source=/home/bpacheco/Test1
cp -a -- "$source" "$source-$(date +"%m-%d-%y-%r")"
bashを使用している場合は、代わりにブレース展開を使用できます。
cp -a /home/bpacheco/Test1{,"-$(date +"%m-%d-%y-%r")"}
ファイルを別のディレクトリにコピーし、タイムスタンプを元のファイル名に追加する場合は、この方法で行うことができます- 最後まで部品なしの値に${source##*/}
展開します(パターンに一致する最長のプレフィックスを削除します):source
/
*/
source=/home/bpacheco/Test1
cp -a -- "$source" "/destination/directory/${source##*/}-$(date +"%m-%d-%y-%r")"
Test1
がディレクトリである場合、それは再帰的にコピーされ、ディレクトリ内のファイルは名前を保持します。トップレベルのディレクトリのみにタイムスタンプが追加されます(たとえばTest1/foo
、にコピーされますTest1-05-10-15-07:19:42 PM
)。すべてのファイル名にタイムスタンプを追加する場合、それは別の問題です。
タイムスタンプ形式を選択するのは悪い考えです。人間にとって読みにくく、並べ替えが難しいです。読みやすく、簡単に並べ替えることができる形式を使用する必要があります。つまり、年、月、日、時間、分、秒の重要度の低い部分を使用し、日付部分と時間部分を分離します。
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%Y%m%d-%H%M%S")"
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%Y-%m-%dT%H%M%S%:z")"