私は、ディレクトリの内容(そのディレクトリの隠しファイルとフォルダを含む)を別のディレクトリにコピーまたは移動するために「不思議な」方法を使用している人がいることを見ました(DN)
。
cp -R dir1/*(DN) dir2/
mv dir/*(DN) dir2/
man cp
再び言及されていないようですman mv
。それは何ですか?これについての詳細はどこで確認できますか?
答え1
彼らはzshですグローバル予選
N sets the NULL_GLOB option for the current pattern D sets the GLOB_DOTS option for the current pattern
何を意味するのか
NULL_GLOB (-G) If a pattern for filename generation has no matches, delete the pattern from the argument list instead of reporting an error. Overrides NOMATCH. GLOB_DOTS (-4) Do not require a leading `.' in a filename to be matched explic‐ itly.
man zshexpn
zsh拡張マニュアルページとzshオプションマニュアルページで詳細情報を見つけることができますman zshoptions
。
あなたの場所:
cp -R dir1/*(DN) dir2/
つまり、隠しファイルもコピーされますが、N
修飾子はここでは意味がありません。一致するファイルがない場合(dir1
空であるか読み取れない場合)、コマンドは次のようになるためです。
cp -R dir2/
そしてN
鎮圧しながら矛盾zshエラーが発生すると、まだ(より混乱している)エラーが発生します。ターゲットファイルオペランドがありません。エラーの原因はですcp
。
N
(nullglob)は、null拡張が可能な場合files=( *(N) )
と同じ状況で最も便利です。for file in *(N)...
でも心配になれば、ただ置いておくことをお勧めします。
cp
または、一致するものがない場合にエラーを報告せずに実行したくない場合は、次のようにします。
function { (( $# == 0 )) || cp -R -- "$@" dir2/; } dir1/*(ND)
結果のリスト(空の許可)は、呼び出し前にサイズを確認する匿名関数に渡されますcp
。