Можно ли возобновить выполнение задания в фоновом режиме и перенаправить его стандартный вывод в файл?

Лично я бы использовал цикл findи while, так как вы можете указать тип файла с помощью -type d/fдля каталога/файла соответственно

как "один вкладыш" из каталога, из которого вы будете запускать:

find. -maxdepth 1 -type f -name "*.*" | while IFS="" read -r line; do filename=$(basename -- "$line"); extension="${filename##.}.files"; mkdir -p "$extension"; mv "$line" "$extension"; done

Или в сценарии:

#!/bin/bash
find. -maxdepth 1 -type f -name "*.*" |
while IFS="" read -r line; do
    filename=$(basename -- "$line")
    extension="${filename##.}.files"
    mkdir -p "$extension"
    mv "$line" "$extension"
done

объяснение

find.-находит файлы и каталоги из текущего каталога

-maxdepth 1-проверяет только текущий каталог (2 также проверяет каталоги следующего уровня)

-type f-соответствует только файлам

-name *.*-любой файл с "." во имя

Я также изменил расширение на .filesв одном объявлении переменной, поскольку я предполагаю, что это то, что вам нужно. Если вы хотите, чтобы tmp.txtнаходилась в каталоге с именем tmp.txtfilesвместо (, как в вашем сценарии в настоящее время ), просто удалите "." вот так:

extension="${filename##.}files"

РЕДАКТИРОВАТЬ:

Итак, как указал @Kusalananda, зацикливание на findможет быть плохой идеей. При этом вы все еще можете использовать findдля этого, просто используя вместо этого временный файл для зацикливания:

#!/bin/bash
find. -maxdepth 1 -type f -name "*.*" > myTemporaryFile

IFS=$'\n' # in case any filenames have spaces in them

for line in $(cat myTemporaryFile); do
    filename=$(basename -- "$line")
    extension="${filename##.}.files"
    mkdir -p "$extension"
    mv "$line" "$extension"
done

rm myTemporaryFile
-1
29.12.2020, 12:08
1 ответ

Для этого вам понадобится внешний инструмент. Проверьте, например,:

перенаправить

reredirect is a utility for taking an existing running program and attaching its outputs (standard output and error output) to files or another process.

илидуплекс

Dupx is a simple *nix utility to redirect standard output/input/error of an already running process.

Dupx is currently implemented as a simple shell script that drives GDB.

0
18.03.2021, 22:40

Теги

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