Bash скрипт на копирование файлов определённого расширения и смена верхнего регистра на нижний
Bash скрипт на копирование файлов определённого расширения из директории(включая подпапки) без сохранения структуры Существует Ubuntu18, на который сохраняется файлы формата Axxx.xlsx Я написал след скрипт
find -name «*.xlsx» | tr [:upper:] [:lower:] | cp /home/vskibenko/tmp/.
Но он отрабатывается не совсем четко
Суть скрипта в след "Копирование файлов из папки и ее подпапок в другую директорию, с изменением названия на нижний регистр"
Ответы (2 шт):
Автор решения: Pak Uula
→ Ссылка
Пример: копирование txt файлов из текущей папки в папку dst/
ls *.txt | sed -e 's#\(.*\)#cp "\1" "dst/\L\1";#' | bash -s
sed формирует на лету скрипт, bash -s его читает из стандартного входа и выполняет.
Скрипт для моей тестовой папки получился вот такой:
cp "A.txt" "dst/a.txt";
cp "b.txt" "dst/b.txt";
cp "c D.txt" "dst/c d.txt";
Имена файлов взяты в кавычки на случай пробелов в именах.
Автор решения: Fat-Zer
→ Ссылка
Я бы сделал как-то так:
find -name "*.xlsx" | while read f; do
fn="$(basename "$f")";
cp "${f}" "/home/vskibenko/tmp/${fn,,}";
done
Замечания:
- Такой вариант не будет работать, если в именах файлов есть переводы строк.
- Расширение переменной с переводом в нижний регистр (
${fn,,}) — этоbash'изм и может не работать в других POSIX-совместимых оболочках, например,dash. - Выражение записано в несколько строк для удобство чтения, в таком виде его можно применять и в одну строку.