Кавычки вокруг "$ i * .csv"
имеют значение. С помощью кавычек оболочка расширяет эту строку до «2014-11 / *. Csv». Точно этого файла не существует, и zip
сообщает об ошибке. Без кавычек *
также раскрывается (через расширение имени файла / «подстановку»), и результирующая команда zip
представляет собой полный список совпадающих файлов, каждый в качестве отдельного аргумента. Вы можете получить второе поведение внутри цикла for
с помощью:
for i in */ ; do zip "zips/${i%/}.zip" "$i"*.csv ; done
zip
также может расширять подстановочные знаки для себя, но не во всех ситуациях. Из руководства по zip :
Программа zip может выполнять такое же сопоставление имен, которые находятся в изменяемом архиве zip или, в случае параметры -x (исключить) или -i (включить) в списке файлов, с которыми нужно работать, с помощью обратной косой черты или кавычек, чтобы указать оболочке не выполнять имя расширение.
Исходная команда работает при последующих попытках после успешного создания архива, потому что zip
пытается сопоставить подстановочные знаки с содержимым существующего архива. Они существуют там и все еще существуют в файловой системе, поэтому они сообщаются с обновлением :
.
Чтобы заставить zip
обрабатывать подстановочные знаки при создании архива, используйте параметр -r
(рекурсивный) для рекурсии в запрошенный каталог и -i
(включить), чтобы ограничить его файлами, соответствующими шаблону:
for i in */ ; do zip -r "zips/${i%/}.zip" "$i" -i '*.csv' ; done
Только для тех, кто следит за моей проблемой. Это было немного странно, но пользователь, который запускал этот процесс, имел тот же идентификатор внутри контейнера докеров, что и хост, поэтому, когда я перечислял все процессы, идентификатор пользователя внутри контейнера получал сопоставлен с конкретным пользователем, который у меня был на хосте. Это объясняет, почему, когда я удалил пользователя на хосте, я все еще видел, что процесс выполняется как "1001".
Итак, теперь я понимаю, что это должно работать именно так.
Я также посмотрел на этот инструмент под названием csysdig на случай, если кому-то интересно, который, похоже, решит проблему, подобную той, что был у меня, поскольку он предоставит вам конкретную информацию о каждом контейнере. В моем случае я видел процессы, происходящие на хосте, а также в контейнерах, поэтому было действительно сложно проверить, что происходит.