Найти все имена файлов в этом каталоге, которые не содержат «a», «b» или «c» в своем имени [дубликаты]

find -name "*_[1-9].txt" -exec sh -c 'echo $1 ${1%_*}_0${1##*_}' _ {} \;
  • El $1está sustituyendo con el archivo encontrado.
  • El ${1%_*}está eliminando todo después de el último guión bajo y el propio guión bajo.
  • Este _0solo imprime un guión bajo seguido de un cero.
  • Esto ${1##*_}elimina todo antes de el último guión bajo y el propio guión bajo.

reemplace echocon mvpara cambiar el nombre de los archivos.


Usé esto para crear 3o archivos

touch Var1_${RANDOM}_Var2_${RANDOM}_Var3_${RANDOM}_data_{1..30}.txt
0
22.09.2018, 22:25
1 ответ

Ваша команда делает что-то очень похожее на то, что вы хотите :она расширяется до списка имен файлов, которые не точно :a, bили c. Если вы проверите, вы увидите:

$ touch a b c d
$ ls *[!abc]*
d

Но если вы создадите другой файл и повторно -проверите:

$ touch argh
$ ls *[!abc]*
argh d

Чтобы исключить имена файлов, которые где-либо содержат эти символы, используйте:

$ shopt -s extglob
$ ls !(*[abc]*)
d

Еще один способ сделать это (снова с помощью расширенных глобусов )— явно перечислить шаблоны:

$ ls !(*a*|*b*|*c*)
d
0
28.01.2020, 04:13

Теги

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