
単一の bash コマンドは、ファイルが以前に空でなかったか、空であったか、または欠落していたかに関係なく、>| foo
空のファイルを作成しますfoo
。(読み取り専用またはディレクトリであった場合は失敗します。)
空のディレクトリを作成するための同様の単一コマンドはありますか?ディレクトリが以前存在していた場合は機能するはずですか否か、 空のか否かとほぼ同じですrm -rf fooDir; mkdir -p fooDir
が、「Don't Repeat Yourself」には違反しません。(ディレクトリまたはファイルが読み取り専用の場合は失敗しても問題ありません。)
コンテキストは、出力を保存するためのディレクトリを作成するスクリプトですが、以前の実行の出力はすべて消去します。
答え1
答えは「いいえ」だと思います。あなたが求めているものには単一の命令はありません。少なくとも以下の2つのリンクによると:
- https://askubuntu.com/questions/517329/既存のディレクトリを上書きする
- https://stackoverflow.com/questions/23698183/how-to-force-cp-to-overwrite-directory-instead-of-creating-another-one-inside
私が言えるのは、2 つの別々のコマンドを使用するということだけです。見た目が悪くて「不便」かもしれませんが、それが唯一の方法である可能性が 99% あります。
答え2
まず、空のディレクトリを探します。普遍的なそれを実行する方法はありませんが、自分で作成するか、を使用して適切な候補を見つけることができますfind /var -type d -empty | xargs ls -ltd
。たとえば、Ubuntu 14 では、 は/var/lib/ntpdate
何年も空になっています。もう 1 つの安全な選択肢は です/etc/ppp/resolv
。
すると、単一のコマンドは になりますrsync -a --delete /var/lib/ntpdate/ fooDir
。末尾のスラッシュが重要になります。残念ながら、普遍的な がなければ/dev/nullDir
、このソリューションは初心者を困惑させる可能性があります。したがって、スクリプトでこれを何度も実行する必要がある場合は、最初に を作成してから rsync で使用することをお勧めします/tmp/emptyDir
。