Як орієнтувати файли без розширень?


0

У мене є кілька каталогів із різною кількістю файлів та підкаталогів. Усі файли, що не мають розширень, мають бути tarвідредаговані. Їх імена можуть змінюватися, тому їх неможливо жорстко закодувати. Підкаталоги також можуть містити не визначене число файлів і підкаталогів, які не мають значення і не повинні включатися до архіву.

Мені б хотілося це зробити за допомогою одного рядка, не використовуючи жодних .shсценаріїв, щоб цей процес міг бути відтворений як можна більш портативно.


Приклад структури каталогів:

$ ls -1F

bar-dir/
bar.with.dots
foo-directory/
foo-no-ext
quux.dir/
quux.ext

Отримане tarмає містити лише foo-no-extв цьому випадку.


Найближчий, з яким я придумав цей далекий, - це

tar -cf archive.tar --exclude=*.* --no-recursion *

Але, виконуючись на наборі зразків, archive.tarвсе ще включає підкаталоги (навіть незважаючи на порожні):

$ tar -tf archive.tar

bar-dir/
foo-directory/
foo-no-ext

1
Використання сценарію оболонки може бути більш компактно , ніж ви думаєте. Наприклад, bashабо perlабсолютно однакова у всіх системах, хоча tarможе бути GNU, BSD, Solaris tar ...
grawity

Відповіді:


3

Ця команда виконує те, що ви хочете:

 find * -maxdepth 0 -type f | tar -cf archive.tar --exclude=*.* -T -

findКоманда знаходить всі файли *тільки в поточному каталозі , -maxdepth 0які є файлами -type f(НЕ каталоги, пристрій або іншими спеціальними файлів). Отримані файли передаються в tar, що виключає імена, що містять крапку.


Це не приймає назви файлів з пробілами. find ... | tar -T - ...було б дещо краще.
grawity

@grawity Відредаговано, як ви запропонували, тепер він дозволяє назви файлів з пробілами.
жонглер

Я б запропонував, -type fякщо ви не хочете знайти також посилання, розетки, труби та вузли пристроїв.
matthias krull

@mugen Я прийняв вашу пропозицію і відредагував команду.
жонглер

1

Як на рахунок:

tar -cf archive.tar `ls|grep "^[^.]*$"`

Від оболонки він не чекає багато, але припустимо, що grep існує (я ніколи не бачив системи без нього).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.