Из википедии:
POSIX, аббревиатура от Portable Operating System Interface, представляет собой семейство стандартов, определенных компьютерным обществом IEEE для обеспечения совместимости. между операционными системами. POSIX определяет интерфейс прикладного программирования (API), а также оболочки командной строки и служебные интерфейсы для совместимости программного обеспечения с вариантами Unix и другими операционными системами.
POSIX не имеет ничего общего с вашей проблемой, а python (или любой другой язык) не может помочь вам с получением привилегий root (администратора) на вашем компьютере.
Можно либо сделать фильтрацию при копировании, скажем, в скрипте копирования. Или вы можете применить фильтр после операции копирования, удалив то, что не разрешено или не нужно.
Вопрос, безусловно, шире , чем проблема, поэтому ответ может быть разным.
Первоначально Unix-подобные -системы не знали понятия расширения файла, хотя некоторые программы могли идентифицировать расширения для адаптации своих операций.
Кроме того, расширение пути должно соответствовать существующим файлам или каталогам, расположенным на указанном уровне в файловой системе (иерархической файловой системе ).
mv
может перемещать всю иерархию каталогов, поэтому mv
также нечетко перемещает файлы, расположенные в соответствующих каталогах.
Простое решение — удалить разрешение на чтение разыскиваемых файлов, чтобы предотвратить их копирование.
prompt% cp -vr album /tmp
'album/' -> '/tmp/album'
'album/song.mp3' -> '/tmp/album/song.mp3'
'album/covert.png' -> '/tmp/album/covert.png'
cp: cannot open 'album/covert.png' for reading: Permission denied
prompt% ls -l album/covert.png
--w-r--r-- user user 8 Sep 07:27 album/covert.png
Файлы переносятся в целевой каталог, за исключением файлов, защищенных для чтения.
Наивный способ решить эту проблему — скопировать все, а затем удалить ненужный файл.
Использование rsync
для копирования всей структуры каталогов source
в target
, затем find
для удаления ненужных файлов изtarget
:
rsync -a source/ target
find target -type f \( -name '*.jpg' -o -name '*.png' \) -delete
Более простой способ сделать это — использовать возможности фильтрации rsync
, чтобы не передавать ненужные файлы.:
rsync -a --exclude='*.png' --exclude='*.jpg' source/ target
В обоих этих случаях вы, возможно, захотите добавить --delete
и/или --delete-excluded
к вызову rsync
, если хотите удалить файлы, отсутствующие в исходном каталоге (, если target
уже содержит материал, и вы хотите, чтобы эти два каталога были идентичны за исключением этих файлов изображений ).