Изменить разрешение папки на основе list.txt

У меня есть 3 массивные папки, содержащие множество других папок, которые мне нужно предоставить третьим лицам для скачивания через SFTP.

На данный момент каждая папка в основном каталоге установлена ​​для прав загрузки для SFTP, поэтому моя идея состоит в том, чтобы создать файл list.txt, содержащий файлы, которые пользователь не может получить, и установить права на что-то? Или переместите эти файлы в другую папку?

  • xdotool sleep 1 vs sleep 1, любая разница?
  • подстановка команд в одинарных кавычках для псевдонима
  • Ошибка «плохого массива» при добавлении записи в ассоциативный массив
  • Найти, где определяется команда bash или из нее?
  • Каков наилучший способ проверить, изменился ли файл в Bash и сохранить 15 последних копий?
  • Как сохранить код в скрипте
  • В указанной папке будет более 2000 папок, содержащих миллион файлов более 500 ГБ, и мне нужно удалить доступ к половине из них

    Пример списка папок

    (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 

  • Когда и когда не использовать операторы с if?
  • Сравните два числа, считанные из файла
  • Bash больше не работает Каталог изменений
  • Пропустить несколько команд для стаи
  • Как автоматизировать открытие Firefox через туннель ssh?
  • SSH-туннель через посреднический сервер - как подключиться в один шаг (используя пару ключей)?
  • 2 Solutions collect form web for “Изменить разрешение папки на основе list.txt”

    Вы можете избежать медленной петли 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 не распознает параметр -R в mv.

    Одна ошибка этого решения заключается в том, что имена каталогов в вашем файле включают в себя новые строки как часть их имени. Во всех остальных случаях (например, имена dir с пробелами) обе версии тестировались и работают нормально.

    Если вы хотите сделать это с помощью цикла, вы можете ускорить работу, избегая вызова 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 

    Примечание. Перед изменением каталога 500 Гб я проверил следующее в небольшой папке с примерами. Кроме того, я бы сделал резервную копию каталога, прежде чем менять его вообще. Даже если это 500 ГБ, наличие резервной копии бесценно.

     tar -zcvf mybackup.tar.gz big_ol_directory 

    Тогда я бы переместил tar.gz, может быть, только на локальную машину или на другую машину в сети, на любую другую машину. Две резервные копии в одном и том же месте не так полезны.

    Что касается прав доступа, мне нравится ваша идея разрешений. Другая идея – использовать групповые разрешения для ограничения доступа.

     # 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. 
    Linux и Unix - лучшая ОС в мире.