запрошенные, зацикленные команды

Добавьте -F ',' , который сообщает awk о наличии разделителя запятой или, если вы используете | . используйте -F '|'

, чтобы ваш скрипт теперь выглядел так

awk -F',' 'FNR==NR{a[$1];next};!($1 in a)' file1 file2 > file3
-1
13.08.2017, 21:53
2 ответа

Да,

find /path/to/source/dir -type f -maxdepth 1 -ok mv {} /path/to/target/dir \;

Команда findздесь найдет все обычные файлы в /path/to/source/dirи запросит у пользователя разрешение на выполнение данной операции, которая в этом случае переместит файл в /path/to/target/dir. Если пользователь нажметy, введите ), операция будет выполнена.

{}будет заменено именем каждого найденного файла по очереди, и команда, которая выполняется для каждого файла, заканчивается на \;.

Если вы замените -okна -exec, пользователю не будет предлагаться, и операция будет выполнена для всех файлов.

-maxdepth 1ограничивает поиск файлов самым верхним каталогом (/path/to/source/dir). Без него findрекурсивно просматривал бы все подкаталоги по заданному пути.

-type fограничивает поиск только обычными файлами (, то есть не каталогами, сокетами, файлами устройств и т. д.)

2
28.04.2021, 23:57

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

Для (вашего )примера:

for f in *
do 
  [ -f "$f" ] || continue
  read -p "mv $f to /tmp? "
  if [ $REPLY = "y" ]
  then 
    echo "moving $f to /tmp"
    # mv -- "$f" /tmp
  else 
    echo "not doing anything with $f"
  fi
done

В зависимости от настроек вашей оболочки, это может или не может подобрать точечные -файлы (, например..bashrc).

Вы можете изменить это по вкусу, --чтобы не отображать ответ "нет"; чтобы учесть «y» или «y» или «yes» или «yabadabadoo».

0
28.04.2021, 23:57

Теги

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