Если вы используете bash
, это можно сделать с помощью расширения имени файла внутри массива:
for dir in New\ folder/20130903/ELF New\ folder/20130904/ELF ; do
files=( "$dir"/* ) # store all matching filenames in an array
echo "${files[2]}" # use 3rd element (subscripts are 0-based)
done
Это выводит
New folder/20130903/ELF/Naqs_20130903.txt
New folder/20130904/ELF/Naqs_20130904.txt
Замените строку echo
на любую команду, которую вам нужно выполнить для этих файлов:
mv "${files[2]}" "${files[2]}e"
Множество команд ( head
/ tail
, sort
, sh
, vim
...) обрабатывают аргументы, которые начинаются с +
специально, поэтому не рекомендуется использовать это в качестве первого символа имени файла. То же самое и с -
, которые даже чаще используются в качестве персонажа-лидера опций.
Как и для -
, чтобы избежать особой обработки +
, вы можете использовать префикс ./
. ./+ foo
- это еще один путь к + foo
, который не начинается с +
. Этот трюк ./
также помогает в других ситуациях, когда аргументы обрабатываются по-разному в зависимости от их содержания. Например, он помогает с awk
для имен файлов, содержащих =
(сравните awk 1 a = b
с awk 1 ./a=b
) или для имен файлов с :
для команд ImageMagick.
Для некоторых команд, которые распознают + x
как параметр, также может помочь использование -
для обозначения конца параметров. Как правило, он работает в меньшем количестве ситуаций, чем префикс ./
.
Если программа должна перестать интерпретировать аргументы командной строки как (потенциальные) параметры и начать рассматривать их как, например, файлы, которые вы используете -
после «реальных» опций:
vim -- +folder/file.ts
gif rm --cached -- **/*.js*
не все программы реализуют это, но большинство современных.