mv "$k" "${f%.*}.csv"
Поскольку переменная f
не определена, вся подстановка не представляет собой пустую строку, и команда становится mv "$k" ".csv"
.
Все файлы, кроме одного, в каждом каталоге потеряны. Последний теперь называется .csv
. Вы, вероятно, этого не заметили, потому что точка в начале делает файл скрытым; используйте ls -a
, чтобы увидеть такие файлы. Файловые менеджеры с графическим интерфейсом обычно также имеют возможность отображать скрытые файлы.
Ваша команда s///
имеет префикс /
, из-за чего sed
ее неправильно понимают. Также похоже, что завершающая одинарная кавычка не является обычной одинарной кавычкой(‘
вместо '
), но это может быть проблемой именно в этом вопросе.
Чтобы изменить все экземпляры строки index.php
на index.temp
в каком-либо файле dir.conf
, используйте
sed -i 's/index\.php/index.temp/g' dir.conf
Точка в шаблоне должна быть экранирована, так как она используется в регулярных выражениях. (вы также можете использовать [.]
вместо\.
). Также обратите внимание, что здесь используется -i
для «редактирования в -месте», что обычно не переносимо .
Чтобы убедиться, что вы не меняете myindex.php
на myindex.temp
или index.php3
на index.temp3
, используйте \<
и\>
(или \b
вместо обоих )для соответствия границы слов:
sed -i 's/\<index\.php\>/index.temp/g' dir.conf