Как изменить / удалить расширения файлов группы файлов

У меня есть куча файлов .txt в каталоге, и я хочу иметь возможность найти эти файлы и удалить расширение из имени файла.

Я могу найти файлы , используя:

$ find . -maxdepth 1 -type f -name "*.txt"
./0test.txt
./1test.txt
./2test.txt
./3test.txt
./4test.txt
./5test.txt
./6test.txt
./7test.txt
./8test.txt
./9test.txt

Затем я попытался использовать команду sed, чтобы удалить расширение «.txt» , например:

find . -maxdepth 1 -type f -name "*.txt" | sed "s/\.txt$//"

Но Я просто получаю имена файлов, перечисленные без их расширений , а фактические имена файлов остаются неизменными .

Итак как ] вы действительно меняете сами имена файлов ?

-1
задан 6 July 2021 в 11:26

2 ответа

Как насчет этого в bash

for v in *.txt ; do mv "$v"  "$(basename "$v" .txt)"; done
1
ответ дан 28 July 2021 в 11:40

$ в регулярном выражении соответствует концу строки, вы не можете сопоставить символы после этого, только до.

Также нужно экранировать, чтобы он не имел специального значения (любой символ).

Итак:

find . -maxdepth 1 -type f -name "*.txt" | sed "s/\.txt$//"

Если вы пытаетесь переименовать файлы, то вы можете использовать ту же подстановку регулярных выражений с помощью команды rename на языке perl

rename "s/\.txt$//" *.txt

(вам не нужен find, когда все файлы находятся на одном уровне каталога), или простой цикл оболочки с mv:

for f in *.txt; do mv -n -- "$f" "${f%.txt}"; done
1
ответ дан 28 July 2021 в 11:40

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

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