LINUX.ORG.RU

Поиск файлов и добавление в архив

 ,


0

1

Добрый день, есть код, который ищет файлы во всех директориях и добавляет в архив. Но он добавляет не только файлы, но и полный путь к этим файлам, как можно это исправить, чтобы он добавлял только файлы в архив или это невозможно сделать ?

find ~ -type f -name "*.txt" -print | xargs -0 tar -czvf "$filename"


Последнее исправление: Gocha (всего исправлений: 1)

А что делать если в разных директориях будут находится файлы с одним и тем же именем? Или у тебя все файлы имеют уникальные названия?

iron ★★★★★
()
Ответ на: комментарий от iron

Будем считать, что файлы имеют уникальные названия, потому что условия, того что файлы имеют одинаковое название нет

Gocha
() автор топика
Ответ на: комментарий от Gocha
iron@IRON /tmp $ find . -type f -name "*.txt"
./1/1/1.txt
./2/2/2/2.txt
./3/3.txt

iron@IRON /tmp $ find . -type f -name "*.txt" -print | awk -F/ '{system("echo -n `dirname "$0"`"); printf " %s\n",$NF}' | xargs -L 1 bash -c 'cd $0;tar -rvf /tmp/test.tar $1;cd -'
a 1.txt
/tmp
a 2.txt
/tmp
a 3.txt
/tmp

iron@IRON /tmp $ tar -t -f /tmp/test.tar 
1.txt
2.txt
3.txt
iron ★★★★★
()
Ответ на: комментарий от iron

Что-то туплю. awk здесь лишний:

find . -type f -name "*.txt" -print | xargs -L 1 -I{} bash -c 'cd `dirname {}`;tar -rvf /tmp/test.tar `basename {}`;cd -'

iron ★★★★★
()
$ find . -type f -name "*.txt"
./3/3/3/3.txt
./2/2/2/2.txt
./1/1/1/1.txt

$ find . -name "*.txt" -type f -print | tar -czvf txt_files.tar.gz -T - --transform 's,.*/,,g'

$ tar -tf txt_files.tar.gz
3.txt
2.txt
1.txt

krasnh ★★★★★
()

получилось так сделать с помощью чат бота. но не на баше а на питоне

забавный факт всплыл, оказывается в тар архиве могут быть файлы с одинаковыми именами/путями

theurs ★★
()
Ответ на: комментарий от teod0r
❰user❙~❱✔≻ touch file.txt
❰user❙~❱✔≻ tar -rvf archive.tar file.txt
file.txt
❰user❙~❱✔≻ tar -rvf archive.tar file.txt
file.txt
❰user❙~❱✔≻ tar -rvf archive.tar file.txt
file.txt
❰user❙~❱✔≻ tar -tvf archive.tar
-rw-r--r-- user/user         0 2023-05-05 09:06 file.txt
-rw-r--r-- user/user         0 2023-05-05 09:06 file.txt
-rw-r--r-- user/user         0 2023-05-05 09:06 file.txt
❰user❙~❱✔≻ 
theurs ★★
()
Ответ на: комментарий от Dog

rtfm вобще в этом топике не принято? «Забавный» факт указан в описании ключа -u. Распаковка или в ручном режиме (-w) или с ключём --occurrence. Ну, еще где-то существует star, у которого есть --find.

mky ★★★★★
()

Опция --transform='s|^.+/([^/]+)$|\1|x' для tar удалит путь из имен файлов.

Команда xargs может вызвать tar несколько раз, и в итоге останется только архив с файлами из последнего вызова. Вместо xargs лучше использовать опцию -T для tar.

No ★★
()

Не сразу клади в архив а сделай uniq по basename и уже его выхлоп отдавай в tar

bga_ ★★★★
()
Ответ на: комментарий от Dog

Как я понимаю, это наследие ленты. Способ «заменить» файл в архиве не переписывая всё. Зачем сделали возможность извлечь из архива любую версию файла мне не понятно.

Интерестно, всякие почтовые антивирусы в курсе про это, или таким способом можно скрыто пересылать любые бинарники...

mky ★★★★★
()
Ответ на: комментарий от theurs

Самые опытные боты, чтобы не спалиться, успешно делают вид что не читают документацию :)

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.