Удалите определенный суффикс из всех файлов в каталоге

У меня была та же проблема... вот как я ее исправил:

Во-первых, я решил полностью удалить dradis (и kali-linux-full), проблемный пакет( s):

apt-get purge dradis

Это не удаляет каталог /etc/dradis/, поэтому я сделал его резервную копию (не было необходимости, но лучше перестраховаться, извините) и уничтожил маленького ублюдка:

mkdir backup-etc-dradis && rsync -avrX /etc/dradis backup-etc-dradis && rm --recursive  /etc/dradis/

Все еще есть некоторые остаточные следы dradis, застрявшие в подушках дивана, и еще что-то (например, пользователь «dradis»), но, к счастью, наш менеджер пакетов имеет довольно высокую «способность» «получать» такого рода проблемы и решать их. .. ;)

apt-get install kali-linux-full

Вуаля. Готов к работе. Надеюсь, это сработает для вас!

0
07.08.2017, 06:35
5 ответов

Использование утилиты Perl rename:

rename 's/_0+/_/' table_subset_*

Это заменяет _, за которым следует один или несколько нулевых символов, только на _.

Описанное выше работает с утилитой rename, иногда называемой prename, которая поставляется с Perl. Некоторые дистрибутивы устанавливают утилиту renameиз утилиты util-linux, которая совершенно несовместима.

Если переименование Perl еще не установлено в вашей системе, способы его установки можно найти здесь

3
28.01.2020, 02:15

Простой один лайнер будет (запускаться из рассматриваемой папки):

rename 's/(?<=table_subset_)([0])+//'./*

Но если запустить извне:

rename 's/(?<=table_subset_)([0])+//' /path/to/files/folder/*
1
28.01.2020, 02:15

Ради чистоты...

Чистый bashответ:(спасибо @steeldriver)

shopt -s extglob
for file in table_subset_0*; do
    mv "$file" "${file/_+(0)/_}"
done

Чистый ответ GNU sed:

ls | sed -n -r '
    /^(table_subset_)0+(.*)/ ! d
    s//mv & \1\2/
    e
'

Чистый ответ GNU awk:

ls | awk -F '_0+' 'NF > 1 { system("mv " $0 " " $1 "_" $2) }'
2
28.01.2020, 02:15

Вы можете сначала использовать awkвместо того, чтобы использовать splitи использовать другой инструмент rename.

awk 'NR%5000==1{ file=sprintf("table_subset_%d", ((++c)) )} {print >file}' geno_file

это разделит файл geno_fileна блоки файлов размером 5 КБ с числовым суффиксом без начальных нулей, но вы можете свободно использовать 0Xdв. выше с 4 цифрами длины, напримерsprintf("..._%04d", ((++c)) )

Или, если вы хотите разделить ваш geno_fileтолько на 9 частей выходного файла, сначала с splitи правильным использованием его параметров, чтобы установить числовой суффикс с 1 (по умолчанию 0 )и-a N(генерируют суффиксы длины N (по умолчанию 2 )), вы можете просто использовать их следующим образом:

split -a 1 --numeric-suffixes=1 -l TOTALLINES/9HERE table_subset_

Но все же не забывайте awkрешение.

0
28.01.2020, 02:15

В дополнение к решению @John1024, вот похожее решение, в котором используются стандартные команды Bash:

for file in table_subset_*; do
    new_name=$(echo "$file" | sed -E -e 's/_0+/_/')
    mv "$file" "$new_name"
done

Принцип тот же. Мы перебираем все файлы и заменяем _0на _.

1
28.01.2020, 02:15

Теги

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