Как перенести только один .csv файл из одной папки в другую, переименовав его?
Есть задача найти в текущем каталоге файл с расширением .csv и перенести его в другой каталог. Надо учесть, что в исходном каталоге может быть сразу несколько таких файлов. В таком случае надо переносить только первый из них. В каталог назначения его надо сохранять под другим названием. Я попробовал написать нужный скрипт сам, но не знаю как в такой реализации получить имя файла для его перемещения:
if $name = ls *.csv; then
echo $name; else echo "ERROR"; fi;
Ответы - Как перенести только один .csv файл из одной папки в другую, переименовав его? / Как перенести только один .csv файл из одной папки в другую, переименовав его?


find
по умолчанию не производит никакой сортировки вывода, и «первый файл» с точки зрения человека может быть далеко не первым в выдаче предложенного вами скрипта.


ls *.csv
. который, понятно, возвращает отсортированный список файлов.

ls
сортирует её вывод по алфавиту (чтобы это не значило) по умолчанию (как и задокументировано). Как известно очевидных интерфейсов не бывает — всему приходится учиться ("There is no intuitive interface, not even the nipple. It's all learned."). К примеру, порядок os.listdir()
вывода в Питоне (и соответствующих системных интерфейсов, на которых она реализована) не гарантирован.

02.09.2015 12:10:48
люблю однострочники.
$ ls *.csv | head -n 1 | xargs -I{} mv {} /новое.место/новое.имя

mv -v `ls *.csv | head -n 1` /another/folder

`
: конструкция $(...)
— входит в posix.

ls *.csv 2>/dev/null | head -1
$name >/dev/null 2>&1 || echo .csv files not found / блин, что за форматер? не могу вставить обратные кавычки перед ls
и после -1





$(...)
замечательно вкладывается в backslash-ы

07.09.2015 09:38:01
Если много файлов (например, ls
или mv
не может скушать список аргументов), то искать надо таким однострочником:
find /source/dir/ -name "*.csv" -print0 | head -1 | xargs -0 -I % mv % /target/dir/
xargs используем: для Linux (и Cygwin) с ключом -I
, для FreeBSD/OS X с ключом -J
, вместо знака %
можно использовать любой символ/букву: find ... | xargs -I i mv i
Более того, используя find <...> -print0 | xargs -0 <command>
, мы страхуемся на кривые имена файлов (если в имени файлов есть пробелы).

16.09.2015 12:53:08
ls /sourse_dir/ | grep -m1 .csv | xargs -I{} mv {} /target_dir/$RANDOM.csv
В таком варианте вне зависимости от наличия пробелов в имени файла он копируется в нужную директорию и переименовывается случайным образом ($RANDOM), не заменяя предыдущие уже скопированные файлы.