list.txtに基づいてフォルダの権限を変更します。

list.txtに基づいてフォルダの権限を変更します。

SFTP経由でダウンロードするためにサードパーティのアクセス権を付与する必要がある他の多くのフォルダを含む3つの大きなフォルダがあります。

現在、ホームディレクトリのすべてのフォルダにSFTPのダウンロード権限が設定されているので、ユーザーがアクセスできないファイルでlist.txtを作成して権限を設定することが私の考えです。または、このファイルを別のフォルダに移動しますか?

問題のフォルダには、500 GBを超える数百万のファイルを含む2000を超えるフォルダが含まれており、その半分のアクセス権を削除する必要があります。

フォルダ一覧の例

(1) some test (2) more test

1. PLANT Madrid Two

2013 Folio ltd

2014-27

201-07-98

3M

3M 4M 5M

3M Comp LTD

5028 - Video

6398SRTTGDS

私はファイルを新しいフォルダに移動したり、権限を変更したりすることができるbashスクリプトと似ています。他のフォルダをダウンロードするためにSFTPを使用するデータ、フォルダ、およびユーザーの量に最適なものは何ですか?

while IFS= read -r dir; do
  mv -t path/to/Deny_folder -R -- "$dir"
done < list.txt

または

while IFS= read -r dir; do
  chown 700 "$dir"
done < list.txt

答え1

次のように遅いbashループを避けることができますが、私のテストではうまくいくようです。

$ tr '\n' '\0' <file1 |xargs -0 -I{} mv -vt path/to/deny {}  #v for verbose.
#OR
$ cat file1 |xargs -d'\n' -I{} mv -vit path/to/deny {}  # set delimiter to new line

テスト実行の場合は、次のテストを実行できます。

cat file1 |xargs -d'\n' -I{} echo "mv -vt path/to/deny " {}

PS:mvRHELとDebianの私のコマンドはmvの-Rオプションを認識しません。

この回避策の1つのトラップは、ファイルのディレクトリ名にディレクトリ名の一部として改行文字が含まれていることです。他のすべての場合(たとえば、スペースがあるディレクトリ名など)では、両方のバージョンがテストされ、正常に動作します。

ループを使用して実行したい場合は、ファイルから読み取った行ごとにmvを呼び出さないことで速度を上げることができます。配列内のすべての行/ディレクトリを「ロード」してからmvを呼び出すことができます。たとえば、次のようになります。

$ while IFS= read -r dir; do folders+=("$dir");done < list.txt
$ mv -t path/to/Deny_folder -- "${folders[@]}"  #-R is not available in Red Hat and Debian

あるいは、ある種のMVグループ化を実行することもできます。

while IFS= read -r dir; do 
let "a++"
folders+=("$dir")
[ "$a" -gt 1000 ] && mv -vt path/to/Deny_folder -- "${folders[@]}" && a=1 && unset folders 
done < list.txt

答え2

注: 500 GB ディレクトリを変更する前に、小さなサンプル フォルダーで次のテストします。また、ディレクトリを変更する前にバックアップしておきます。 500GBであるにもかかわらず、バックアップを行うことは非常に貴重です。

tar -zcvf mybackup.tar.gz big_ol_directory

次に、tar.gzをローカルコンピュータ、ネットワーク上の他のコンピュータ、または別のコンピュータに移動します。同じ場所に2つのバックアップがあると、使い勝手が悪くなります。

権限については、権限に関するあなたのアイデアが好きです。別のアイデアは、グループ権限を使用してアクセスを制限することです。

# ensure that no one has access except the owner (root, your user, whatever)
chmod -R 600 big_ol_directory

# alternatively
# chown -R myuser:companygroup big_ol_directory
# chmod -R 660 big_ol_directory

# create a group and add a user:
# https://www.howtogeek.com/50787/add-a-user-to-a-group-or-second-group-on-linux/

# begin granting access to ftpusers 
chown -R root:ftpusers big_ol_directory

# use 770, 760, 740 as desired (g+rw is x6x)
chmod -R g+rw big_ol_directory/public

# files in the root of big_ol_directory, including directories
# other than public, will still be owner-editable only.

関連情報