スクリプトまたはnautilusメニューを介した再帰的なchmodのみのフォルダーまたはファイルのみ?


8

これについては、これまでに説明しました

私が知りたいのは、これらをどのように変えるかです:

このフォルダー内の再帰的なchmodのみのファイル:

find . -type f -exec chmod 0600 {} \;

このフォルダー内の再帰的なchmodのみのフォルダー:

find . -type d -exec chmod 0755 {} \;

bashスクリプトに挿入すると、次のようになります。

ファイルの場合:

rchmodf 744 .

ディレクトリの場合:

rchmodd 755 .

そして...それが可能であれば、おそらくnautilusの右クリックメニューオプションに移動することもできます。

回答:


10

最初の引数としてモードを渡し、後続の引数として1つ以上のディレクトリ名を渡すことによって呼び出すことができるスクリプトを次に示します。Linuxでは、ディレクトリ名を渡さない場合、渡されたものと同じになります.(現在のディレクトリ)。このスクリプトrchmodfに名前を付け、実行可能(chmod a+rx /path/to/rchmodf)にして、どこかに配置します$PATH

#!/bin/sh
mode=$1; shift
find "$@" -type f -exec chmod "$mode" {} +

説明:mode=$1; shift変数modeをスクリプトの最初の引数に設定し、その最初の引数をリストから削除します。"$@"すべての引数のリストに展開されます。

必要に応じて、ディレクトリモードとファイルモードの両方を受け入れるスクリプトを作成できます。

#!/bin/sh
dir_mode=$1; shift
file_mode=$1; shift
find "$@" -type d -exec chmod "$dir_mode" {} + -o -type f -exec chmod "$file_mode" {} +

744は便利なファイルモードではないことに注意してください。644(ユーザーが書き込み可能で誰でも読み取り可能)と755(これも世界中で実行可能)の方がはるかに一般的です。また、ツリー内のすべてのファイルを実行可能または実行不可能に変更しても、ほとんど役に立ちません。おそらく、このスクリプトを+rX(capital X、すでに実行可能なディレクトリとファイルに対してのみ実行可能ビットを設定するための)引数で呼び出したいと思うでしょう。実際、Xシンボリックモードは、おそらくこれらのスクリプトを使用した後のものですchmod -R +rX .

bashまたはzshを使用すると、再帰的に動作する別の方法がありますが、ディレクトリに対してのみ実行できます。bashの場合、バージョン4が必要で、shopt -s globstar最初に実行します。

chmod a+rx **/*/

zshのでは、あなただけの接尾辞でファイルに基づいて行動することができます(.)chmod a+r **/*(.)

ノーチラスの質問を渡します。


忍者と忍者 1つの検索を使用して、異なる結果セットに対して異なるコマンドを実行できますか?OR演算子をオーバーロードする場合は+1。
カレブ

1

スクリプトはuser23538によってリンクされています。よろしくお願いします。

私はそれを試しました、そしてそれはうまくいきます。使用する場合はご注意ください。パス引数として(スクリプトが配置されているのと同じディレクトリで実行)、実際にはスクリプトのファイル権限を644に変更するため、上のディレクトリに配置します。

#!/bin/sh
#
# chmodr.sh
#
# author: Francis Byrne
# date: 2011/02/12
#
# Generic Script for recursively setting permissions for directories and files
# to defined or default permissions using chmod.
#
# Takes a path to recurse through and options for specifying directory and/or
# file permissions.
# Outputs a list of affected directories and files.
#
# If no options are specified, it recursively resets all directory and file
# permissions to the default for most OSs (dirs: 755, files: 644).

# Usage message
usage()
{
echo "Usage: $0 PATH -d DIRPERMS -f FILEPERMS"
echo "Arguments:"
echo "PATH: path to the root directory you wish to modify permissions for"
echo "Options:"
echo " -d DIRPERMS, directory permissions"
echo " -f FILEPERMS, file permissions"
exit 1
}

# Check if user entered arguments
if [ $# -lt 1 ] ; then
usage
fi

# Get options
while getopts d:f: opt
do
case "$opt" in
d) DIRPERMS="$OPTARG";;
f) FILEPERMS="$OPTARG";;
\?) usage;;
esac
done

# Shift option index so that $1 now refers to the first argument
shift $(($OPTIND - 1))

# Default directory and file permissions, if not set on command line
if [ -z "$DIRPERMS" ] && [ -z "$FILEPERMS" ] ; then
DIRPERMS=755
FILEPERMS=644
fi

# Set the root path to be the argument entered by the user
ROOT=$1

# Check if the root path is a valid directory
if [ ! -d $ROOT ] ; then
echo "$ROOT does not exist or isn't a directory!" ; exit 1
fi

# Recursively set directory/file permissions based on the permission variables
if [ -n "$DIRPERMS" ] ; then
find $ROOT -type d -print0 | xargs -0 chmod -v $DIRPERMS
fi

if [ -n "$FILEPERMS" ] ; then
find $ROOT -type f -print0 | xargs -0 chmod -v $FILEPERMS
fi

@ user23538は、コードをオンサイトのブロックに貼り付けるように既に指示されています。追加するものがなければ、それを正確に投稿しないでください。
HalosGhost 2014年

彼らは指示されましたが、指示されませんでした。だから私はしました。それは私が同じ人でなくても、要求されたものです。これが正しくない理由を説明してください。
Kluny 2014年

ああ、ユーザーがどれだけ前に回答を投稿したかがわかりませんでした。編集に対する回答について何か見つけた場合は、私は反対票を削除させていただきます。
HalosGhost 2014年

0

基本的に上記を実行するスクリプトを作成しましたが、コマンドラインオプション(ディレクトリやファイルのアクセス許可、または両方を除外すると、すべてが755-644に自動的にリセットされます)にも多少の柔軟性が提供されます。また、いくつかのエラーシナリオをチェックします。

http://bigfloppydonkeydisk.blogspot.com.au/2012/09/recursively-chmod-only-files-or.html


2
ここにコードを貼り付けてください。そうすることで、将来、多くのリンク切れを回避できます。2つのバージョンがバラバラになるのが心配な場合は、参照用にリンクを残すことができます。
l0b0 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.