Как 'find -exec' передает имена файлов с пробелами?

(примечание: этот ответ был написан до того, как вопрос был обновлен с помощью команды join и сообщений об ошибках)

команда называется соединением .

со страницы руководства:

join - объединить строки двух файлов в общем поле

, так как ваши входные файлы не отсортированы, вам нужно сначала отсортировать их

join <(sort file1) <(sort file2)

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

join является частью gnu coreutils, поэтому его следует устанавливать в большинстве распространенных систем GNU / Linux.

14
15.11.2015, 21:46
1 ответ

( Это должен быть комментарий, но он слишком большой.)

Для тех, кто любит экспериментировать:

Создайте скрипт со списком переданных позиционных параметров, назовите его list_positional_parameters.sh.

#!/bin/bash

# http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_09_07.html
# Try globbing patterns, e.g. "X[[:digit:]][[:digit:]]" to see what happens

if [ $# -lt 1 ]; then
   echo "Usage: $0 and then at least one parameter"
   exit 1
fi

counter=1

while (($#)); do
   echo "$counter = '$1'"
   # pop positional argument 1 off the stack of positional arguments
   shift
   (( counter++ ))
done

Запустите findс ним в каком-нибудь каталоге $dir:

find "$dir" -exec./list_positional_parameters.sh '{}' ';' | less

Как и ожидалось, во всех вызовах есть только один параметр — имя файла, независимо от того, есть ли в его имени пробелы или нет.

0
27.01.2020, 19:51

Теги

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