この質問は、「という質問に関連しています。ディレクトリ内のすべてのフォルダをタッチします。」。
touch
ディレクトリ内のすべてを処理する方法
- 再帰的
..
「directory up」などの隠し項目が含まれています。.
touch -h
シンボリックリンクを逆参照する必要はありません。参照ファイルを
touch -r <file>
タイムスタンプソースとして使用する一つの中でシェルスクリプト?
答え1
touch
あなたのコマンドが-h
サポートしている場合逆参照しない:
find . -depth -exec touch -h -r "$reference_file" {} +
touch -c -h -r "$reference_file" ..
(これは、ファイルが存在しない場合、NetBSD / FreeBSDはファイルの生成を避けますが、GNUまたはbusyboxはそうではないことを意味します-h
(GNUではファイルを生成せずにエラーメッセージを印刷します)。 )。-c
touch
touch
-c
または、単一のコマンドを使用して実行中のコマンドの数を減らしますfind
。touch
find .. . -depth \( ! -name .. -o -prune \) -exec touch -c -h -r "$reference_file" {} +
つまり、..
与えられたファイルのリストに追加されますfind
が、find
打つ(その中に降りる代わりに)。
すべてのディレクトリ(パスが次に始まらないディレクトリ-
:
find "$dir/.." "$dir/" \( ! -name .. -o -prune \) \
-exec touch -c -h -r "$reference_file" {} +
($dir/
ディレクトリへのシンボリックリンクを参照するためにここで代わりに使用されました$dir
。)$dir
BSDでは、find
次のことができます。
find -f "$dir/.." -f "$dir/" \( ! -name .. -o -prune \) \
-exec touch -c -h -r "$reference_file" -- {} +
$dir
で始まる問題を回避するには-
。
次のようにすることもできます。
(
cd -P -- "$dir/" &&
exec find .. . \( ! -name .. -o -prune \) \
-exec touch -c -h -r "$reference_file" {} +
)
($reference_file
相対パスではないと仮定)。
$reference_file
シンボリックリンクの場合、次のようにGNUをtouch
使用するとき-h
-h
-h
それはどこから出た)とFreeBSDでは、touch
ターゲットの修正時間を使用することも、使用しないこともあります-h
。
以下を使用する場合は、zsh
再帰ワイルドカードを使用できます。
autoload zargs
zargs -- $dir/{.,..,**/*(NDoN)} -- touch -c -h -r $reference_file --
(oN
ソートされていないリストは省略できます。これは最適化のみを目的としています。)
ksh93はついに2005年にこのglobstar
オプションを使用してzsh再帰ワイルドカードのサポートを追加しました。
(set -o globstar; FIGNORE=
command -x touch -c -h -r "$reference_file" -- ~(N)"$dir"/**)
ただし、ここksh
にはすべての項目.
と項目が含まれているため、すべてのディレクトリが..
複数回タッチされます。
bashは最終的に2009年にksh93を複製しましたが、globstar
もともとはディレクトリを下るときにシンボリックリンクに従ったので/broken/でした。 2014年4.3で修正されました。
bashには、コマンドラインを分割して回避するためのzshzargs
またはksh93
zshと同じ機能はありません。command -x
引数のリストが長すぎます。質問。 GNUシステムでは、いつでもGNUを使用してxargs
次のことができます。
xargs -r0a <(
shopt -s dotglob nullglob globstar
printf '%s\0' "$dir/"{.,..,**}
) touch -c -h -r "$reference_file" --
今私はおそらくfind
これを使い続けます。パフォーマンスの低下に加えて、globのもう1つの問題は、ディレクトリツリーの閲覧中に発生するエラー(アクセス拒否など)が自動的に無視されることです。