Я просто зняв архів, який створив безлад файлів у моєму охайному каталозі. Наприклад:
user@comp:~/tidy$ tar xvf myarchive.tar
file1
file2
dir1/
dir1/file1
dir1/subdir1/
dir1/subdir1/file1
dir2/
dir2/file1
...
Я очікував, що файл tar буде організований в одній папці (тобто myarchive/
), але це не було! Зараз у мене є 190 файлів і каталогів, які в цифровому вигляді зафіксували те, що було організованим каталогом. Ці файли untar'd потрібно очистити.
Чи є спосіб "скасувати" це та видалити файли та каталоги, вилучені з цього архіву?
Дякуємо за чудові відповіді нижче. У підсумку , ось що працює з двома кроками (1) видалення файлів та (2) видалення порожньої структури каталогів у зворотному порядку упаковки (спочатку видалення зовнішніх каталогів):
tar tf myarchive.tar | xargs -d'\n' rm
tar tf myarchive.tar | tac | xargs -d'\n' rmdir
І ще безпечніше попередній перегляд команд шляхом додавання echo
після xargs
.
xargs
( tac
замість цього sort -r
є просто косметика), але ви приймаєте відповідь із заміною процесу, яка, як ви пояснили в коментарях, вам не підходила? Також, будь ласка, введіть xargs -d'\n'
перемикач у своїй публікації, якщо ви хочете зробити підсумок для майбутніх користувачів, щоб вони не покусали пробіли у назвах файлів.
-d'\n'
до цього часу, і після подальшого аналізу ваша відповідь насправді ближче до того, що я використовував.
-d'\n'
полягає в тому, що якщо ви не скажете xargs
розділяти аргументи на нові рядки (це те, що ви подаєте), а на пробіли, то файл з ім'я folder1/some file
буде читатися як folder1/some
і name
.