Как переименовать несколько файлов в каталоге одновременно

Я считаю, что вы ищете вариант keepcache = 1 , который вам нужно будет установить в / etc / dnf / dnf.conf . После этого вы должны увидеть файлы в / var / cache / dnf / .

Если вы хотите удалить загруженные rpm позже, вы можете использовать dnf clean packages .

12
18.05.2019, 14:46
4 ответа

Мне понравилась небольшая задача, которую вы разместили, так что вот мое решение. Я предполагаю, что все ваши файлы начинаются с 5 цифровых символов, поэтому используйте команду cut , чтобы заменить исходные числовые файлы на «XXXXX».

Ниже файлы перед командой.

-rw-rw-r--. 1 daniel daniel 0 May 13 23:18 11111_bar_file.csv
-rw-rw-r--. 1 daniel daniel 0 May 13 22:54 12345_baz_file.csv
-rw-rw-r--. 1 daniel daniel 0 May 13 22:54 67890_foo_file.xml

Ниже приведена однострочная команда.

for src in *.csv; do dst=XXXXX$(echo $src| cut -c6-); mv $src $dst; done;

Ниже файлы после команды.

-rw-rw-r--. 1 daniel daniel 0 May 13 22:54 67890_foo_file.xml
-rw-rw-r--. 1 daniel daniel 0 May 13 22:54 XXXXX_bar_file.csv
-rw-rw-r--. 1 daniel daniel 0 May 13 23:18 XXXXX_baz_file.csv

Это то, что вы ищете?:)

Ссылки:

Циклический вывод команды в bash

Подстроки в bash

4
27.01.2020, 19:54

Попробуйте:

for f in *.csv; do mv -i -- "$f" "XXXXX-${f#*-}"; done

Как это работает:

  • for f in *.csv; do

    Это запускает цикл по всем *.csvфайлам.

  • mv -i -- "$f" "XXXXX-${f#*-}"

    Это переименовывает файлы, как вы хотите, с интерактивным запросом перед перезаписью любого файла.

  • done

    Это отмечает конец цикла.

Пример:

$ ls -1
11234-cam-yy3r5-ro9490-85adu9.csv
12345-ram-3e3r5-io9490-89adu9.csv
14423-sam-hh3r5-uo9490-869du9.csv
45434-dam-qwe35-to9490-43adu9.csv
$ for f in *.csv; do mv -i -- "$f" "XXXXX-${f#*-}"; done
$ ls -1
XXXXX-cam-yy3r5-ro9490-85adu9.csv
XXXXX-dam-qwe35-to9490-43adu9.csv
XXXXX-ram-3e3r5-io9490-89adu9.csv
XXXXX-sam-hh3r5-uo9490-869du9.csv
11
27.01.2020, 19:54

rename -n 's/(\w+)/XXXXX/' *.csv

удалите -n, когда будете довольны.

15
27.01.2020, 19:54

без вилок:

ls | perl -lne '$suf=substr($_,6); rename $_, "XXXXX-$suf"'

Когда вы используете цикл оболочки, mvразветвляется один раз на файл. Команда Perl renameэтого не делает.

(Команда Perl rename имеет некоторые ограничения, но в данном конкретном случае эти ограничения не применяются.)

Что касается показанной ранее команды rename, да, она работает, но тогда возникает путаница между двумя разными видами переименования и так далее. Если у вас есть правильный, отлично, но если нет, это тоже работает.

Если у вас нет команды perl -rename и вы не можете ее установить, вы можете просто сделать это:

ls | perl -lne '$old=$_; s/(\w+)/XXXXX/; rename $old, $_'

Как видите, здесь используется та же замена, что и в верхнем ответе. Конечно, переименование perl -имеет другие навороты (в верхнем ответе, упомянутые уже -n, затем -0, -fи так далее ), и чем больше из них вам нужно, тем больше вы должны установить это вместо того, чтобы накатывать свой собственный таким образом.

1
27.01.2020, 19:54

Теги

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