web-dev-qa-db-ja.com

MidnightCommanderのアップロード/コピーの除外

私の質問は this one に似ていますが、ファイルをコピー/アップロードするときに、いくつかのディレクトリを再帰的に除外したいと思います。具体的には、アップロードするコードベース全体から.gitフォルダーを除外したいと思います(サブリポジトリーが含まれ、構造のかなり深い部分もあります)

「-」キーを使用して.gitの選択を解除すると、現在のディレクトリに対して実行できますが、これを再帰的に実行する方法はありますか?

3
Teo.sk

Midnight Commanderは、サブディレクトリの操作をそのように制御することはできません。 「全か無かの」タイプの取引の一種。あなたが言ったように、あなたはトップレベルのエントリーをコントロールすることができますが、それ以上は何もできません。

F2メニューで使用するスクリプトを作成できると思います...

別の方法、ちょっと厄介ですが、うまくいくでしょう...

find . -type d -name ".git" -exec chmod 000 "{}" \;

これにより、すべての.gitサブディレクトリが読み取れなくなり、MCはエラーダイアログをポップアップし、「続行」と指示して処理を続行します。

その後:

find . -type d -name ".git" -exec chmod 750 "{}" \;

必要な権限を復元します。 (私は自分で750と640を使用していますが、多くの人は755と644を好みます...そこでの「750」の代わりに好きなものを使用してください)

ハ!そして、私の「F2メニューに入れる」というアイデアのブレンドとして...これらの2つのコマンドをF2メニューに入れることができます...これをほとんど(ほとんど!)苦痛なしにします。


編集:

リクエストにより:

#
# Restore permissions for any .git subdirectories to 755
g   Restore .git directories to 755 permissions
    if [ "x$PWD" = "x$HOME" ]; then
        exit
    fi
    find . -type d -name ".git" -exec chmod 755 "{}" \; 2>/dev/null
#
# Remove permissions for any .git subdirectories
G   Hide .git directories with 000 permissions
    if [ "x$PWD" = "x$HOME" ]; then
        exit
    fi
    find . -type d -name ".git" -exec chmod 000 "{}" \; 2>/dev/null
#

これをファイルに保存します '〜/ .config/mc/men'

このファイルがすでに存在する場合は、それをENDに追加します(特定のものはファイルの最初にある必要があり、それを台無しにしたくない)。

このファイルが存在しなかった場合、ここのエントリは、通常表示されていたすべてのデフォルトのF2 /ユーザーメニューエントリを置き換えます。これらのメニューエントリを元に戻す必要がある場合(いくつかは便利です!)、findという名前のファイルmc.men(通常は/ etc/mc /)にあります)、それを〜/ .config/mc/menにコピーし、もう一度、上記を最後に追加します。終わり!

古いバージョンのmcを使用している場合は、mc.menファイルを検索する必要がある場合があります。 menファイルは〜/ .mc.men ...にある必要があります複雑です、はい、少し。しかし最近、mcは、ベストプラクティス(XDGの提案)を反映するように構成ファイルの場所を修正し、すべてを〜/ .config/mc/。 mc(1)のマニュアルページは非常に役立ちます。ユーザーメニューを検索してください。

これにより、2つのコマンドが追加されます。

g (lowercase g)  which will RESTORE the 755 permissions for any .git subdirs
G (uppercase g)  which will REMOVE the permissions (set to 000) from any .git subdirs

$ HOMEでこれを実行しないようにするためのテストを追加しましたが、これは破壊的ではありません...そこでそれを実行できるのはうまくいきませんでした。

楽しい!

3
lornix