私はLinuxコマンドを学んでいます。
時間情報を含むファイル名を変更すると、タグが自動的に割り当てられます:
。この:
フラグをどのように変更できますか_
?
以下はファイル名の例です。更新されたタイミング情報があります。代わりに:
名前を付けるには_
?
ee_Sun_Aug_11_22:20:27_GMT-8_2019.txt
また、次はなぜ動作しませんか?
$ cp /var/log/ee.txt ee_`date`.txt
cp: target `2019.txt' is not a directory
答え1
:
ksh93、zsh、bash、mkshシェル(または最新バージョンのbusybox sh)を使用して、現在のディレクトリで名前で終わる1つ以上の文字を含むすべてのファイルを繰り返し、.txt
文字:
をに変更するには、次のように_
します。
for name in ./*:*.txt; do
newname=${name//:/_}
mv -i "$name" "$newname"
done
またはより短く、
for name in ./*:*.txt; do
mv -i "$name" "${name//:/_}"
done
パラメータ置換は値のすべての位置を${name//:/_}
変更します(上記のシェルはksh93演算子もサポートします)。:
_
$name
ファイル名は変更されますが、mv -i
新しい名前がすでに使用されていることを確認するメッセージが表示されます。
例として示されているファイル名はee_Sun_Aug_11_22_20_27_GMT-8_2019.txt
。
注文
cp /var/log/ee.txt ee_`date`.txt
date
出力は空白を含む文字列なので機能しません。このスペースはcp
あなたがコピーしたいと思うようにします一部ファイルをディレクトリに入れます。したがって、「ディレクトリではない」エラーが発生します。
次はうまくいきます。
cp /var/log/ee.txt "ee_$(date).txt"
バックティックをに変更したためで$(...)
はなく、新しい名前を2回引用したため、よりうまく機能します。
これにより、ファイルee_Sun Aug 11 16:57:37 CEST 2019.txt
(または類似のファイル)が生成されます。
よりきれいなファイル名を取得するには、date
出力形式をより正確に指定することをお勧めします。
cp ee.txt "ee_$(date +"%F_%H-%M-%S").txt"
フォーマット文字列はシステムマニュアル()またはコマンドマニュアルに%F_%H-%M-%S
記載されており、対応するディレクティブをサポートしていない限り置き換えることができます。strftime(3)
man 3 strftime
date
ee_2019-08-11_16-59-55.txt
date
%F
%Y-%m-%d
または、
cp ee.txt "$(date +"ee_%F_%H-%M-%S.txt")"
(date
コマンド形式が新しいファイル名を作成するほとんどのタスクを実行するようにします。)