2013-09-14 1 views
0

Я копирую пул .tar резервных копий домашних каталогов пользователей на новый сервер и архивированные файлы уже скопированы со старого сервера на новый сервер.Как извлечь длинный список tarball через STDIN?

Для примера;

[[email protected] /home]# ls /home |grep tar 
returns: 
user1.tar 
user2.tar 
user3.tar 
[etc] 

Но сделать вещи немного сложнее, то тарболы были созданы из корневого каталога на исходном сервере, так что экстракция по умолчанию имеет «дом» в пути по умолчанию например .;

[[email protected] /home]# tar -xvf user1.tar 

экстракты в новый домашний каталог относительно где ваши работы команды и размещает распакованные файлы на пути

/home/home/user1 

Ближайшим Я считаю, что я пришел к тому, что требуется (с несколькими различными вариации);

[[email protected] /]# ls /home |grep tar |tar -xvf - 

возвращение;

tar: This does not look like a tar archive 
tar: Exiting with failure status due to previous errors 

Теперь я понимаю, что есть много обходных путей для каждого из различных частей, но если я буду расти, чтобы быть супер-круто сисадмин, как мои друзья, я, вероятно, следует знать, супер-крутые трюки как это.

Спасибо!

ответ

1

tar ожидает файл tar на stdin, а не список имен файлов.

Обработать каждый файл по отдельности:

ls *.tar | xargs -n 1 tar xvf 

или

for file in *.tar; do tar xvf $file; done 
+1

'Ls * .tar' может быть' эхо * .tar'; нет необходимости вызывать команду 'ls', которая в этом случае просто выведет свои аргументы. (Если у вас нет одной или нескольких каталогов с именами, соответствующими '* .tar'.) И я уверен, что вам не нужна опция' z' в этой второй команде. –