Как я передаю программу командной строки список файлов из каталога?

Не ясно, что Вы подразумеваете "под обновлением часового пояса".

Unix и Linux сохраняют время как число секунд с 1 января 1970, 0:00 UTC. Системные часы Unix являются поэтому независимым часовым поясом. Часовые пояса не существуют в ядре Linux; это только, когда пространство пользователя отображения приложения время, когда число секунд с 1970 интерпретируется с помощью часового пояса. Обычно, эта интерпретация сделана через библиотечные функции C. Часовой пояс выбран TZ переменная среды. Определения часового пояса (которые состоят из названия часового пояса, сместите от UTC, даты, когда летнее время в действительности, и смещения в течение DST) часть GNU libc и обычно включается в дистрибутивы Linux как "tzdata" пакет. Поэтому обновление определений часового пояса является вопросом выполнения apt-get upgrade, yum update, или некоторая подобная операция.

Обратите внимание, что некоторое программное обеспечение, такое как Java, имеет их собственные файлы определения часового пояса, которые должны быть обновлены отдельно.

NTP отслеживает число секунд с 1 января 1900, UTC. Поэтому NTP, как ядро Unix, не имеет никакого понятия часовых поясов.

4
03.03.2018, 05:11
4 ответа

Если следующее не работает ...

cd ./target_dir
    set -- *
    onedrive-cli put "$@"

Тогда это, вероятно, потому, что вам нужно положить для каждого аргумента, и в этом случае это может:

{    printf 'one-drive-cli' 
     printf " put ///%s///" *
} | sed 's|'\''|&"&"&|g;s|///|'\''|g' |
. /dev/stdin 

Но если , что не работает, то ваш цикл for , вероятно, является лучшим решением оболочки, потому что ваш скрипт python будет поддерживать только одну загрузку на вызов.

Однако лучший способ сделать это - отредактировать скрипт python в соответствии с вашими потребностями.

0
27.01.2020, 21:00
 использование: onedrive-cli поместите [-h] [-n] файл [папка].

Это означает, что подкоманда put программы onedrive-cli должна иметь либо один, либо два аргумента без опции. Файл является обязательным (имя локального файла для загрузки), а папка - необязательной (удаленная папка для загрузки).

Команда onedrive-cli put * передает имена всех файлов в текущей директории в качестве аргументов. Она работает независимо от того, какие причудливые символы могут содержать имена файлов¹. Проблема в том, что программа onedrive-cli не принимает в качестве аргументов несколько файлов, в отличие от многих команд манипулирования файлами.

Цикл - это правильный способ:

for file in * ; do
  onedrive-cli put "$file"
done

Цикл может быть медленным, если команда должна аутентифицировать сервер заново для каждого файла. Похоже, что нет способа сделать это лучше с помощью утилиты `onrive-cli-, как это предусмотрено. Вы можете написать несколько строк на Python (предупреждение: полностью не протестировано! В частности, я не знаю, как будут сигнализироваться ошибки.)

#!/usr/bin/env python
import sys
from onedrive import api_v5
api = api_v5.PersistentOneDriveAPI.from_conf({})
for f in sys.argv[1:]:
    api.put(f)

¹ Исключение: по историческим причинам * опускает файлы, имя которых начинается с . (точечные файлы).

1
27.01.2020, 21:00
..

Может быть, проще просто проконтролировать это с помощью "Найти".

find ~/Desktop/docs -type f -exec overdrive-cli put {} \;

exec возьмет каждый файловый дескриптор и передаст его в перечисленную команду. {} обозначает имя файла, а \; указывает конец выполнения. Таким образом, вы даже можете использовать следующее, если хотите убедиться, что каждый файл загружается только один раз.

find ~/Desktop/docs -type f -exec overdrive-cli put {}; mv {} ~/Desktop/old-docs \;

Может понадобиться двойная кавычка {}, чтобы справиться с пробелами, но это маловероятно.

1
27.01.2020, 21:00

Составьте список адресов файлов, которые вы хотите загрузить. Убедитесь, что ни один из них не имеет адресов и пробелов. Затем запишите

import os
#files is the list of addresses
for address in files:
    os.system("onedrive-cli put " + address)
0
27.01.2020, 21:00

Теги

Похожие вопросы