Удаление определенных типов файлов, которые не содержат имя хоста в имени файла

Я занимаюсь развертыванием файлов для нескольких машин на каждом сайте, поэтому мне намного проще заархивировать все файлы один раз и развернуть на каждой машине. Однако я хотел бы удалить конфигурацию для всех других ПК.

Zip содержит различные общие файлы, а также конкретные настройки для каждой машины.

Например, меньшая часть zip-файла обеспечит:

generic1.xjson
generic2.xjson
generic3.xjson
generic1.yjson
generic2.yjson
PC-1-1.json
PC-1-2.json
PC-1-3.json

Так что я надеюсь удалить каждый PC-1 - * .json, который не содержит имени хоста ПК.

(имена хостов ПК всегда совпадают с PC-1-1 и т. Д.)

Я пытался сделать что-то вроде:

ls -1 | grep -v *$hostname* | xargs -0 rm *PC-*-*.json

Это удалит все файлы, включая один для текущего имени хоста.

В поисках того, что я ошибаюсь в этом, или есть ли лучший способ сделать эту функцию.

3
задан 9 August 2019 в 22:19

1 ответ

Ваша команда не работает как ожидалось из-за rm *PC-*-*.json! это было бы расширяться оболочкой и включает все PC-x-x.json файлы.

На самом деле Вы используете xargs неправильным способом.


Что-то вроде этого должно сделать задание:

ls -Q1 | grep -v $hostname | grep -E "PC-1-[0-9]+\.json" | xargs echo

изменение echo с rm когда Вы, где уверенный, что это работает.

Лучшее решение использовало бы find:

find -type f -name "PC-*-*.json" -not -name "*$hostname*" -exec rm -i {} +
  • удалить -i от rm после того, как Вы были уверены, что команда работает правильно.
2
ответ дан 1 December 2019 в 16:49

Другие вопросы по тегам:

Похожие вопросы: