cpで使用するためのzsh globbingモードの変更

cpで使用するためのzsh globbingモードの変更

ファイルではなく特定のフォルダからファイルを再帰的にコピーするスクリプトを作成しようとしています。A.extnB/*.extnディレクトリであり、いくつかの一般的な拡張子です。これが私が持っているものです:C/*BCextn

#!/usr/local/bin/zsh
setopt EXTENDED_GLOB
TMPDIR=/tmp/test

cp -pR $(dirname $0)/**~(*.foo/*|*/bar.txt|*.abc|qux.txt) $TMPDIR

しかし、予想通りパターンが否定されるわけではありません。私はその理由を知っていると思います。モードが正しい場合でも(表示されているようにecho)、cp -Rモードを知らずに「すべきではない」ディレクトリに入り、そのディレクトリに入るとモードは機能しなくなります。

目的の効果を得るには、上記の内容をどのように修正する必要がありますか?私はfindそれが可能だと思いますxargsが、上記の明確さに魅力を感じ、同様のものを好みます(しかし、これが間違ったアプローチであれば、他の解決策に非常に満足するでしょう)。

ベストアンサー1

そうですね。cp実行前にモードが拡張されているため、コマンドは不明です。

代わりに--parentsオプションを使用して目的を達成できます。これはパターンに一致するファイルのみをコピーしますが、末尾のファイル名だけでなく、指定されたフルパス名も使用します。cp-R

ただし、このオプションは移植可能ではありません。 AFAIK、GNUバージョンのcpのみをサポートしています。

おすすめ記事