Как использовать команды для файлов внутри каталогов, начинающиеся со специального символа?

Если вы используете 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"
3
08.08.2016, 18:27
2 ответа

Множество команд ( head / tail , sort , sh , vim ...) обрабатывают аргументы, которые начинаются с + специально, поэтому не рекомендуется использовать это в качестве первого символа имени файла. То же самое и с - , которые даже чаще используются в качестве персонажа-лидера опций.

Как и для - , чтобы избежать особой обработки + , вы можете использовать префикс ./ . ./+ foo - это еще один путь к + foo , который не начинается с + . Этот трюк ./ также помогает в других ситуациях, когда аргументы обрабатываются по-разному в зависимости от их содержания. Например, он помогает с awk для имен файлов, содержащих = (сравните awk 1 a = b с awk 1 ./a=b ) или для имен файлов с : для команд ImageMagick.

Для некоторых команд, которые распознают + x как параметр, также может помочь использование - для обозначения конца параметров. Как правило, он работает в меньшем количестве ситуаций, чем префикс ./ .

2
27.01.2020, 21:22

Если программа должна перестать интерпретировать аргументы командной строки как (потенциальные) параметры и начать рассматривать их как, например, файлы, которые вы используете - после «реальных» опций:

vim -- +folder/file.ts
gif rm --cached -- **/*.js*

не все программы реализуют это, но большинство современных.

1
27.01.2020, 21:22

Теги

Похожие вопросы