Я пытаюсь создать графическую программу для своего сценария.
Внутри скрипта я использую tar для создания архива tar.
Из графической программы я получаю полное имя файла, который я хочу создать архив tar.
tar -cvf temp.tar /home/username/dir1/dir2/selecteddir
Мой архив tar включает в себя home, username, dir1, dir2 и selecteddir, а я хочу, чтобы tar создавал архив только с выбранным dir.
dirname
чтобы извлечь все до "selecteddir" иbasename
извлечь "selecteddir". Попробуйте две команды с аргументом $ path.tar -C /home/username/dir1/dir2 -cvf temp.tar '*.csv'
не сработаетЕсть два метода, которые вы можете использовать для решения этой проблемы.
Первый, на мой взгляд, проще. Просто
cd
в каталог прямо над тем, который вы хотите сжать. В этом случае это будетdir2
.Второй способ - использовать опцию,
--transform
которая беретsed
выражение и запускает его для имен файлов. Примечание: вам придется убежать/
вsed
выражении.источник
tar: Cowardly refusing to create an empty archive
. Когда у меня есть точка, это раздражает, что корень содержит каталог с именем.
. Итак, близко, но не идеально.$ cd /home/username/dir1/dir2/ && tar -cvf temp.tar selecteddir *
работал на меня. Использование звездочки вместо точки.
. Обновление: Woops - хотя я потерял скрытые файлы.Сначала перейдите в рабочий каталог,
Тогда используйте магию
*
:-)источник
На самом деле, я нашел проблему, используя ответ Кетана
Когда вы хотите просто скопировать все файлы только в dir2, просто все файлы, тогда у меня сначала появляется идея:
Однако, если вы не находитесь в каталоге dir2, это может вызвать проблемы, поскольку * приведет к tar-файлам в вашей текущей директории. И я исправил проблему с помощью команды ниже:
источник
.
в корневой папке.