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:mv
RHELと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