rename(1)
rename
— это Perl-скрипт Ларри Уолла, создателя Perl. Он принимает регулярное выражение Perl и работает с именем файла.
rename 's/\.txt$/.tsv/' *.txt
Если вам нужно установить rename
на Debian/Ubuntu, вы можете сделать
sudo apt install rename
Есть много способов решить эту проблему, например, вы можете попросить find
вызвать скрипт, вот так:
$ find. -type f -name "*.csv" -exec your_script {} ;
{} — это имя файла, которое каждый раз находилось.
Возможно, вам придется экранировать эти символы:
$ find. -type f -name "*.csv" -exec your_script \{\} \;
Причина, по которой это не сработало, заключается в том, что xargs
впихнет столько файлов в командную строку, сколько сможет.
Таким образом, ваш скрипт "extractdata" получит все файлы сразу и, возможно, обработает только первый аргумент. т.е. у вас есть N файлов, вы выполняете один скрипт с всеми файлами в качестве аргумента.
Вам нужно использовать аргумент -n
:
... | xargs -n 1./extractdata
Таким образом, у вас есть N файлов, вы выполняете N сценариев с одним файловым аргументом в каждом.
Вы также можете выполнять свой сценарий параллельно, используяparallel
:при этом выполняется четыре экземпляра одновременно, возможно, что приводит к более эффективной обработке в зависимости от данных, ОЗУ и оборудования:
... | parallel -n 1 -j 4./extractdata
(Если «extractdata» использует временные файлы с фиксированными именами, что не является хорошей практикой, тогда два или более скриптов, выполняющихся параллельно, будут записывать временные файлы друг друга, что приведет к путанице ).