Как сохранить одно расширение файла и удалить другие?

Поля не совпадают (по крайней мере, в примере) Вызываемый файл «full csv» имеет поле «PSEUDO BITHDAY», тогда как второй файл имеет поле «PSEUDO BI R THDAY». Во втором файле имеется дополнительный R.

Опция -t хорошо работает во всех выпусках соединения.

ПРАВКА: Ваш пример работает для меня

    bash-4.1$ join -t, a b
    NAIN GENIEUR 01/01/1917,C,D
    bash-4.1$ join --version
    join (GNU coreutils) 8.4
    Copyright (C) 2010 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.

    Written by Mike Haertel.
    bash-4.1$
-121--289677-

Ваша команда должна работать. Однако, по крайней мере в приведенном примере, в конце строки в file2 имеется космос. Это важно, это принимается как часть поля. Как вы видите, при удалении файла происходит ожидаемое соединение файлов:

$ join -t"," -j 1 file1 file2  ## no output
$ sed -i 's/ $//' file2        ## remove the trailing space
$ join -t"," -j 1 file1 file2  ## now it works
NAIN GENIEUR 01/01/1917,C,D
-121--289678-

Более современные OSES защищают себя от такого рода неправильного использования по умолчанию, обычно путем установки пользовательских ограничений. Вероятно, поэтому система по-прежнему реагирует - она позволяет выделять память только до определенного объема, что значительно меньше, чем у машины.

0
24.05.2018, 07:42
2 ответа

POSIBLEMENTE:

find. ! \( -name '*.tr0' -o -name '*.scs' \) -type f -exec echo rm -f {} +

(Elimina echocuando quieras ejecutar el comando)

Si su findapoyo-delete:

find. ! \( -name '*.tr0' -o -name '*.scs' \) -type f -delete

El comando anterior funcionará recursivamente. Si desea solo en el directorio actual:

find. ! -name. -prune ! \( -name '*.tr0' -o -name '*.scs' \) -type f
2
28.01.2020, 02:18

En un shell que permite patrones de globbing extendidos, como bashcon la opción de shell extglobhabilitada(shopt -s extglob)oksh93:

rm./*.!(tr0|scs)

El patrón de expansión de la capa extendida !(pattern-list)coincide con cualquier cosa excepto con los patrones especificados en el|-delimitado pattern-list.


Tenga en cuenta que el patrón también coincide con los nombres de los directorios si contienen puntos, pero dado que rmno elimina los directorios de forma predeterminada, esto solo generaría algunos mensajes de error.

Para evitar esto, se usaría un bucle, probando cada nombre coincidente para asegurarse de que se refiera a un archivo normal:

for name in./*.!(tr0|scs); do
    [ -f "$name" ] && rm "$name"
done
2
28.01.2020, 02:18

Теги

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