Я хотел бы использовать программу командной строки (в частности, geotifcp), которая принимает file_a.tif и file_a.tfw и выводит файл_b.tif. В основном он объединяет два файла с одинаковым именем с разными расширениями файлов и выдает новый файл. Я хотел бы выяснить, как выкупить несколько тысяч из этих вещей. Я создал списки всех этих файлов, используя основные команды ls > output. Я не обязательно ищу ответ, нацеленный на эту программу, но больше на сценарии вообще. Я тоже не ищу, чтобы ты написал это для меня, просто дай мне толчок в общем направлении.
Спасибо за любую помощь!
Я, как правило, делаю такие вещи, используя sed или awk для создания командных строк, а затем подключаю их к оболочке. В качестве возможного примера, если у вас есть файл только имен файлов xxxxx_a.tif,
sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt
, чтобы узнать, генерирует ли он команды, которые вы после этого, тогда
sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt | sh
[d2 ], чтобы запустить их все. Входная строка asdfasdfsadf_a.tif приводит к geotifcp asdfasdfsadf_a.tif asdfasdfsadf_a.tfw asdfasdfsadf_b.tif, считая, что входные имена файлов [filename]_a.tif и [filename]_a.tiw и имя выхода [filename]_b.tif. [!d3 ]
Я, как правило, делаю такие вещи, используя sed или awk для создания командных строк, а затем подключаю их к оболочке. В качестве возможного примера, если у вас есть файл только имен файлов xxxxx_a.tif,
sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt
, чтобы узнать, генерирует ли он команды, которые вы после этого, тогда
sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt | sh
, чтобы запустить их все.
Входная строка asdfasdfsadf_a.tif приводит к geotifcp asdfasdfsadf_a.tif asdfasdfsadf_a.tfw asdfasdfsadf_b.tif, считая, что входные имена файлов [filename]_a.tif и [filename]_a.tiw и имя выхода [filename]_b.tif.
Я, как правило, делаю такие вещи, используя sed или awk для создания командных строк, а затем подключаю их к оболочке. В качестве возможного примера, если у вас есть файл только имен файлов xxxxx_a.tif,
sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt
, чтобы узнать, генерирует ли он команды, которые вы после этого, тогда
sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt | sh
, чтобы запустить их все.
Входная строка asdfasdfsadf_a.tif приводит к geotifcp asdfasdfsadf_a.tif asdfasdfsadf_a.tfw asdfasdfsadf_b.tif, считая, что входные имена файлов [filename]_a.tif и [filename]_a.tiw и имя выхода [filename]_b.tif.
Я, как правило, делаю такие вещи, используя sed или awk для создания командных строк, а затем подключаю их к оболочке. В качестве возможного примера, если у вас есть файл только имен файлов xxxxx_a.tif,
sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt
, чтобы узнать, генерирует ли он команды, которые вы после этого, тогда
sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt | sh
, чтобы запустить их все.
Входная строка asdfasdfsadf_a.tif приводит к geotifcp asdfasdfsadf_a.tif asdfasdfsadf_a.tfw asdfasdfsadf_b.tif, считая, что входные имена файлов [filename]_a.tif и [filename]_a.tiw и имя выхода [filename]_b.tif.
Я, как правило, делаю такие вещи, используя sed или awk для создания командных строк, а затем подключаю их к оболочке. В качестве возможного примера, если у вас есть файл только имен файлов xxxxx_a.tif,
sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt
, чтобы узнать, генерирует ли он команды, которые вы после этого, тогда
sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt | sh
, чтобы запустить их все.
Входная строка asdfasdfsadf_a.tif приводит к geotifcp asdfasdfsadf_a.tif asdfasdfsadf_a.tfw asdfasdfsadf_b.tif, считая, что входные имена файлов [filename]_a.tif и [filename]_a.tiw и имя выхода [filename]_b.tif.
Я, как правило, делаю такие вещи, используя sed или awk для создания командных строк, а затем подключаю их к оболочке. В качестве возможного примера, если у вас есть файл только для имен файлов xxxxx_a.tif,
sed -e 's /\(.*\)_.*/ geotifcp \ 1_a.tif \ 1_a.tfw \ 1_b.tif / '& lt; list-file.txt
, чтобы узнать, генерирует ли он команды, затем
sed -e 's / \ (. * \ ) _. * / geotifcp \ 1_a.tif \ 1_a.tfw \ 1_b.tif / '& lt; list-file.txt | sh
, чтобы запустить их все.
Входная строка asdfasdfsadf_a.tif
приводит к geotifcp asdfasdfsadf_a.tif asdfasdfsadf_a.tfw asdfasdfsadf_b.tif
, считая, что входные имена файлов [имя_файла] _a.tif
и [имя_файла] _a.tiw
и имя выхода [имя_файла ] _b.tif
.
Я, как правило, делаю такие вещи, используя sed или awk для создания командных строк, а затем подключаю их к оболочке. В качестве возможного примера, если у вас есть файл только для имен файлов xxxxx_a.tif,
sed -e 's /\(.*\)_.*/ geotifcp \ 1_a.tif \ 1_a.tfw \ 1_b.tif / '& lt; list-file.txt
, чтобы узнать, генерирует ли он команды, затем
sed -e 's / \ (. * \ ) _. * / geotifcp \ 1_a.tif \ 1_a.tfw \ 1_b.tif / '& lt; list-file.txt | sh
, чтобы запустить их все.
Входная строка asdfasdfsadf_a.tif
приводит к geotifcp asdfasdfsadf_a.tif asdfasdfsadf_a.tfw asdfasdfsadf_b.tif
, считая, что входные имена файлов [имя_файла] _a.tif
и [имя_файла] _a.tiw
и имя выхода [имя_файла ] _b.tif
.
Я, как правило, делаю такие вещи, используя sed или awk для создания командных строк, а затем подключаю их к оболочке. В качестве возможного примера, если у вас есть файл только для имен файлов xxxxx_a.tif,
sed -e 's /\(.*\)_.*/ geotifcp \ 1_a.tif \ 1_a.tfw \ 1_b.tif / '& lt; list-file.txt
, чтобы узнать, генерирует ли он команды, затем
sed -e 's / \ (. * \ ) _. * / geotifcp \ 1_a.tif \ 1_a.tfw \ 1_b.tif / '& lt; list-file.txt | sh
, чтобы запустить их все.
Входная строка asdfasdfsadf_a.tif
приводит к geotifcp asdfasdfsadf_a.tif asdfasdfsadf_a.tfw asdfasdfsadf_b.tif
, считая, что входные имена файлов [имя_файла] _a.tif
и [имя_файла] _a.tiw
и имя выхода [имя_файла ] _b.tif
.
Я, как правило, делаю такие вещи, используя sed или awk для создания командных строк, а затем подключаю их к оболочке. В качестве возможного примера, если у вас есть файл только для имен файлов xxxxx_a.tif,
sed -e 's /\(.*\)_.*/ geotifcp \ 1_a.tif \ 1_a.tfw \ 1_b.tif / '& lt; list-file.txt
, чтобы узнать, генерирует ли он команды, затем
sed -e 's / \ (. * \ ) _. * / geotifcp \ 1_a.tif \ 1_a.tfw \ 1_b.tif / '& lt; list-file.txt | sh
, чтобы запустить их все.
Входная строка asdfasdfsadf_a.tif
приводит к geotifcp asdfasdfsadf_a.tif asdfasdfsadf_a.tfw asdfasdfsadf_b.tif
, считая, что входные имена файлов [имя_файла] _a.tif
и [имя_файла] _a.tiw
и имя выхода [имя_файла ] _b.tif
.
Вероятно, что использовать аргументы командной строки.
Попробуйте этот скрипт bash:
#!/bin/bash
echo "First argument is $1"
echo "Second argument is $2"
Если имя файла сценария test1.sh, вы получите следующее:
a@u1104:~$ chmod +x test1.sh
a@u1104:~$ ./test1.sh
First argument is
Second argument is
a@u1104:~$ ./test1.sh file1.tif file2.tiw
First argument is file1.tif
Second argument is file2.tiw
Другим компонентом будет просмотр вашего файла. Вы можете сделать это следующим образом:
cat test |while read line; do
echo "${line}"
done
Вместо echo "${line}" вы можете, например, сделать ./test1.sh ${line}.tif ${line}.tiw
Я предлагаю вам взглянуть на
sed # to manipulate text output from, for instance, ls
и
xargs # to use some std input to generate (many) new command lines
в сочетании с конвейером вывода одной команды на вход следующего (например, из ls to sed to xargs)
Чтобы, скажем, у вас есть каталог с * tif и * tfw файлом. Вы хотите что-то сделать с файлами tif, используя соответствующий файл tfw. Предположим также, что для каждого файла tif существует tfw-файл с тем же именем
# list all those tif files in one long column
ls -1 *.tif
# chop of the end .*tif leaving you with the base name
ls *.tif | sed -s 's/\.tif$//'
# feed the previous into xargs to tag a tif with the info in a tfw and
# create new geo_*.tif file
ls *.tif | sed -s 's/\.tif$//' | xargs -i -t geotifcp -e {}.tfw {}.tif geo_{}.tif
. Последняя строка может в значительной степени сделать то, что вам нужно, в одной длинной (трудно читаемой) командной строке без скриптов. [ ! d4]
Чтобы помочь понять, вы также можете сначала создать список файлов, как и вы:
ls *tif> output.list
Затем очистите его с помощью sed, чтобы убедиться, что он хорошо себя ведет.
sed -s 's/\.tif$//' output.list > clean_output.list
end, затем используйте xargs с опцией -p вместо -t, чтобы получить приглашение до выдачи каждой команды:
cat clean_output.list | xargs -i -p geotifcp -e {}.tfw {}.tif geo_{}.tif
EDIT: Вариант первого заключается в том, чтобы использовать больше sed less xargs. Это также немного более «отлаживается».
По существу, вы можете полностью генерировать текст вашей желаемой команды с помощью sed
sed -s 's/\(.*\)\.tif$/geotifcp -e \1.tfw \1.tif geo_\1.tif/' output.list > process.sh
[d11 ] Я знаю, регулярное выражение выглядит ужасно, но вот грубое объяснение содержания в одинарных кавычках: 's / A / B /' заменяет A с BA в нашем случае (что-то) .tif (обратите внимание, что нам нужно избежать скобки). Что-то хранится в \ 1 и используется для сборки команды geotifcp (что является B). Вероятно, что использовать аргументы командной строки.
Попробуйте этот скрипт bash:
#!/bin/bash
echo "First argument is $1"
echo "Second argument is $2"
Если имя файла сценария test1.sh, вы получите следующее:
a@u1104:~$ chmod +x test1.sh
a@u1104:~$ ./test1.sh
First argument is
Second argument is
a@u1104:~$ ./test1.sh file1.tif file2.tiw
First argument is file1.tif
Second argument is file2.tiw
Другим компонентом будет просмотр вашего файла. Вы можете сделать это следующим образом:
cat test |while read line; do
echo "${line}"
done
Вместо echo "${line}" вы можете, например, сделать ./test1.sh ${line}.tif ${line}.tiw
Я предлагаю вам взглянуть на
sed # to manipulate text output from, for instance, ls
и
xargs # to use some std input to generate (many) new command lines
в сочетании с конвейером вывода одной команды на вход следующего (например, из ls to sed to xargs)
Чтобы, скажем, у вас есть каталог с * tif и * tfw файлом. Вы хотите что-то сделать с файлами tif, используя соответствующий файл tfw. Предположим также, что для каждого файла tif существует tfw-файл с тем же именем
# list all those tif files in one long column
ls -1 *.tif
# chop of the end .*tif leaving you with the base name
ls *.tif | sed -s 's/\.tif$//'
# feed the previous into xargs to tag a tif with the info in a tfw and
# create new geo_*.tif file
ls *.tif | sed -s 's/\.tif$//' | xargs -i -t geotifcp -e {}.tfw {}.tif geo_{}.tif
. Последняя строка может в значительной степени сделать то, что вам нужно, в одной длинной (трудно читаемой) командной строке без скриптов. [ ! d4]
Чтобы помочь понять, вы также можете сначала создать список файлов, как и вы:
ls *tif> output.list
Затем очистите его с помощью sed, чтобы убедиться, что он хорошо себя ведет.
sed -s 's/\.tif$//' output.list > clean_output.list
end, затем используйте xargs с опцией -p вместо -t, чтобы получить приглашение до выдачи каждой команды:
cat clean_output.list | xargs -i -p geotifcp -e {}.tfw {}.tif geo_{}.tif
EDIT: Вариант первого заключается в том, чтобы использовать больше sed less xargs. Это также немного более «отлаживается».
По существу, вы можете полностью генерировать текст вашей желаемой команды с помощью sed
sed -s 's/\(.*\)\.tif$/geotifcp -e \1.tfw \1.tif geo_\1.tif/' output.list > process.sh
Я знаю, регулярное выражение выглядит ужасно, но вот грубое объяснение содержания в одинарных кавычках: 's / A / B /' заменяет A с BA в нашем случае (что-то) .tif (обратите внимание, что нам нужно избежать скобки). Что-то хранится в \ 1 и используется для сборки команды geotifcp (что является B).
Вероятно, что использовать аргументы командной строки.
Попробуйте этот скрипт bash:
#!/bin/bash
echo "First argument is $1"
echo "Second argument is $2"
Если имя файла сценария test1.sh, вы получите следующее:
a@u1104:~$ chmod +x test1.sh
a@u1104:~$ ./test1.sh
First argument is
Second argument is
a@u1104:~$ ./test1.sh file1.tif file2.tiw
First argument is file1.tif
Second argument is file2.tiw
Другим компонентом будет просмотр вашего файла. Вы можете сделать это следующим образом:
cat test |while read line; do
echo "${line}"
done
Вместо echo "${line}" вы можете, например, сделать ./test1.sh ${line}.tif ${line}.tiw
Я предлагаю вам взглянуть на
sed # to manipulate text output from, for instance, ls
и
xargs # to use some std input to generate (many) new command lines
в сочетании с конвейером вывода одной команды на вход следующего (например, из ls to sed to xargs)
Чтобы, скажем, у вас есть каталог с * tif и * tfw файлом. Вы хотите что-то сделать с файлами tif, используя соответствующий файл tfw. Предположим также, что для каждого файла tif существует tfw-файл с тем же именем
# list all those tif files in one long column
ls -1 *.tif
# chop of the end .*tif leaving you with the base name
ls *.tif | sed -s 's/\.tif$//'
# feed the previous into xargs to tag a tif with the info in a tfw and
# create new geo_*.tif file
ls *.tif | sed -s 's/\.tif$//' | xargs -i -t geotifcp -e {}.tfw {}.tif geo_{}.tif
. Последняя строка может в значительной степени сделать то, что вам нужно, в одной длинной (трудно читаемой) командной строке без скриптов. [ ! d4]
Чтобы помочь понять, вы также можете сначала создать список файлов, как и вы:
ls *tif> output.list
Затем очистите его с помощью sed, чтобы убедиться, что он хорошо себя ведет.
sed -s 's/\.tif$//' output.list > clean_output.list
end, затем используйте xargs с опцией -p вместо -t, чтобы получить приглашение до выдачи каждой команды:
cat clean_output.list | xargs -i -p geotifcp -e {}.tfw {}.tif geo_{}.tif
EDIT: Вариант первого заключается в том, чтобы использовать больше sed less xargs. Это также немного более «отлаживается».
По существу, вы можете полностью генерировать текст вашей желаемой команды с помощью sed
sed -s 's/\(.*\)\.tif$/geotifcp -e \1.tfw \1.tif geo_\1.tif/' output.list > process.sh
Я знаю, регулярное выражение выглядит ужасно, но вот грубое объяснение содержания в одинарных кавычках: 's / A / B /' заменяет A с BA в нашем случае (что-то) .tif (обратите внимание, что нам нужно избежать скобки). Что-то хранится в \ 1 и используется для сборки команды geotifcp (что является B).
Вероятно, что использовать аргументы командной строки.
Попробуйте этот скрипт bash:
#!/bin/bash
echo "First argument is $1"
echo "Second argument is $2"
Если имя файла сценария test1.sh, вы получите следующее:
a@u1104:~$ chmod +x test1.sh
a@u1104:~$ ./test1.sh
First argument is
Second argument is
a@u1104:~$ ./test1.sh file1.tif file2.tiw
First argument is file1.tif
Second argument is file2.tiw
Другим компонентом будет просмотр вашего файла. Вы можете сделать это следующим образом:
cat test |while read line; do
echo "${line}"
done
Вместо echo "${line}" вы можете, например, сделать ./test1.sh ${line}.tif ${line}.tiw
Я предлагаю вам взглянуть на
sed # to manipulate text output from, for instance, ls
и
xargs # to use some std input to generate (many) new command lines
в сочетании с конвейером вывода одной команды на вход следующего (например, из ls to sed to xargs)
Чтобы, скажем, у вас есть каталог с * tif и * tfw файлом. Вы хотите что-то сделать с файлами tif, используя соответствующий файл tfw. Предположим также, что для каждого файла tif существует tfw-файл с тем же именем
# list all those tif files in one long column
ls -1 *.tif
# chop of the end .*tif leaving you with the base name
ls *.tif | sed -s 's/\.tif$//'
# feed the previous into xargs to tag a tif with the info in a tfw and
# create new geo_*.tif file
ls *.tif | sed -s 's/\.tif$//' | xargs -i -t geotifcp -e {}.tfw {}.tif geo_{}.tif
. Последняя строка может в значительной степени сделать то, что вам нужно, в одной длинной (трудно читаемой) командной строке без скриптов. [ ! d4]
Чтобы помочь понять, вы также можете сначала создать список файлов, как и вы:
ls *tif> output.list
Затем очистите его с помощью sed, чтобы убедиться, что он хорошо себя ведет.
sed -s 's/\.tif$//' output.list > clean_output.list
end, затем используйте xargs с опцией -p вместо -t, чтобы получить приглашение до выдачи каждой команды:
cat clean_output.list | xargs -i -p geotifcp -e {}.tfw {}.tif geo_{}.tif
EDIT: Вариант первого заключается в том, чтобы использовать больше sed less xargs. Это также немного более «отлаживается».
По существу, вы можете полностью генерировать текст вашей желаемой команды с помощью sed
sed -s 's/\(.*\)\.tif$/geotifcp -e \1.tfw \1.tif geo_\1.tif/' output.list > process.sh
Я знаю, регулярное выражение выглядит ужасно, но вот грубое объяснение содержания в одинарных кавычках: 's / A / B /' заменяет A с BA в нашем случае (что-то) .tif (обратите внимание, что нам нужно избежать скобки). Что-то хранится в \ 1 и используется для сборки команды geotifcp (что является B).
Вероятно, что использовать аргументы командной строки.
Попробуйте этот скрипт bash:
#!/bin/bash
echo "First argument is $1"
echo "Second argument is $2"
Если имя файла сценария test1.sh, вы получите следующее:
a@u1104:~$ chmod +x test1.sh
a@u1104:~$ ./test1.sh
First argument is
Second argument is
a@u1104:~$ ./test1.sh file1.tif file2.tiw
First argument is file1.tif
Second argument is file2.tiw
Другим компонентом будет просмотр вашего файла. Вы можете сделать это следующим образом:
cat test |while read line; do
echo "${line}"
done
Вместо echo "${line}" вы можете, например, сделать ./test1.sh ${line}.tif ${line}.tiw
Я предлагаю вам взглянуть на
sed # to manipulate text output from, for instance, ls
и
xargs # to use some std input to generate (many) new command lines
в сочетании с конвейером вывода одной команды на вход следующего (например, из ls to sed to xargs)
Чтобы, скажем, у вас есть каталог с * tif и * tfw файлом. Вы хотите что-то сделать с файлами tif, используя соответствующий файл tfw. Предположим также, что для каждого файла tif существует tfw-файл с тем же именем
# list all those tif files in one long column
ls -1 *.tif
# chop of the end .*tif leaving you with the base name
ls *.tif | sed -s 's/\.tif$//'
# feed the previous into xargs to tag a tif with the info in a tfw and
# create new geo_*.tif file
ls *.tif | sed -s 's/\.tif$//' | xargs -i -t geotifcp -e {}.tfw {}.tif geo_{}.tif
. Последняя строка может в значительной степени сделать то, что вам нужно, в одной длинной (трудно читаемой) командной строке без скриптов. [ ! d4]
Чтобы помочь понять, вы также можете сначала создать список файлов, как и вы:
ls *tif> output.list
Затем очистите его с помощью sed, чтобы убедиться, что он хорошо себя ведет.
sed -s 's/\.tif$//' output.list > clean_output.list
end, затем используйте xargs с опцией -p вместо -t, чтобы получить приглашение до выдачи каждой команды:
cat clean_output.list | xargs -i -p geotifcp -e {}.tfw {}.tif geo_{}.tif
EDIT: Вариант первого заключается в том, чтобы использовать больше sed less xargs. Это также немного более «отлаживается».
По существу, вы можете полностью генерировать текст вашей желаемой команды с помощью sed
sed -s 's/\(.*\)\.tif$/geotifcp -e \1.tfw \1.tif geo_\1.tif/' output.list > process.sh
Я знаю, регулярное выражение выглядит ужасно, но вот грубое объяснение содержания в одинарных кавычках: 's / A / B /' заменяет A с BA в нашем случае (что-то) .tif (обратите внимание, что нам нужно избежать скобки). Что-то хранится в \ 1 и используется для сборки команды geotifcp (что является B).
Предлагаю вам взглянуть на
sed #, чтобы манипулировать текстовым выходом, например, ls
и
xargs #, чтобы использовать некоторый вход std для генерации (многих) новых команд
в сочетании с конвейером вывода одной команды на вход следующего (например, от ls до sed to xargs)
Чтобы, скажем, у вас есть каталог с * tif и * tfw файлом. Вы хотите что-то сделать с файлами tif, используя соответствующий файл tfw. Предположим также, что для каждого файла tif существует tfw-файл с тем же именем
# список всех этих файлов tif в одном длинном столбце ls -1 * .tif # chop of the end. * tif оставляя вас с базовым именем ls * .tif | sed -s 's / \. tif $ //' # передать предыдущее в xargs, чтобы пометить tif с информацией в tfw и # create new geo _ *. tif file ls * .tif | sed -s '/ \. tif $ //' | xargs -i -t geotifcp -e {} .tfw {} .tif geo _ {}. tif
Последняя строка может в значительной степени сделать то, что вам нужно за один длинный (трудно читаемый) командной строки без скриптов.
Чтобы помочь понять, вы также можете сначала создать список файлов, как вы это делали:
ls * tif & gt; output.list
Затем очистите его с помощью sed, чтобы убедиться, что он хорошо себя ведет.
sed -s 's / \. tif $ //' output.list & gt; clean_output.list
end, затем используйте xargs с опцией -p вместо -t, чтобы получить приглашение перед выдачей каждой команды:
cat clean_output. список | xargs -i -p geotifcp -e {} .tfw {} .tif geo _ {}. tif
EDIT: Вариант первого заключается в том, чтобы использовать больше sed less xargs. Это также немного более «отлаживается».
По существу, вы можете полностью генерировать текст вашей желаемой команды с помощью sed
. ] sed -s 's / \ (. * \) \. tif $ / geotifcp -e \ 1.tfw \ 1.tif geo_ \ 1.tif /' output.list & gt; process.sh
Я знаю, регулярное выражение выглядит ужасно, но вот грубое объяснение содержания в одинарных кавычках: 's / A / B /' заменяет A с BA в нашем случае (что-то) .tif (обратите внимание, что нам нужно избегать скобок). Что-то хранится в \ 1 и используется для сборки команды geotifcp (которая есть B).
Возможно, вы используете аргументы командной строки.
Попробуйте этот скрипт bash:
#! / bin / bash echo «Первый аргумент равен $ 1» echo «Второй аргумент равен $ 2»
Если имя файла сценария равно test1.sh
, вы получите следующее: [ ! d10]
a @ u1104: ~ $ chmod + x test1.sh a @ u1104: ~ $ ./test1.sh Первый аргумент - второй аргумент - это @ u1104: ~ $ ./test1.sh file1 .tif file2.tiw Первым аргументом является file1.tif Второй аргумент - file2.tiw
Другим компонентом будет цикл через ваш файл. Вы можете сделать это следующим образом:
cat test | во время чтения строки; do echo "$ {line}" done
Вместо echo "$ {line}"
вы можете, например, выполнить ./ test1. sh $ {line} .tif $ {line} .tiw
Я предлагаю вам посмотреть на
sed #, чтобы манипулировать текстовым выходом, например, ls
и
xargs #, чтобы использовать некоторый вход std для генерации (многих) новых команд
в сочетании с конвейером вывода одной команды на вход следующего (например, от ls до sed to xargs)
Чтобы, скажем, у вас есть каталог с * tif и * tfw файлом. Вы хотите что-то сделать с файлами tif, используя соответствующий файл tfw. Предположим также, что для каждого файла tif существует tfw-файл с тем же именем
# список всех этих файлов tif в одном длинном столбце ls -1 * .tif # chop of the end. * tif оставляя вас с базовым именем ls * .tif | sed -s 's / \. tif $ //' # передать предыдущее в xargs, чтобы пометить tif с информацией в tfw и # create new geo _ *. tif file ls * .tif | sed -s '/ \. tif $ //' | xargs -i -t geotifcp -e {} .tfw {} .tif geo _ {}. tif
Последняя строка может в значительной степени сделать то, что вам нужно за один длинный (трудно читаемый) командной строки без скриптов.
Чтобы помочь понять, вы также можете сначала создать список файлов, как вы это делали:
ls * tif & gt; output.list
Затем очистите его с помощью sed, чтобы убедиться, что он хорошо себя ведет.
sed -s 's / \. tif $ //' output.list & gt; clean_output.list
end, затем используйте xargs с опцией -p вместо -t, чтобы получить приглашение перед выдачей каждой команды:
cat clean_output. список | xargs -i -p geotifcp -e {} .tfw {} .tif geo _ {}. tif
EDIT: Вариант первого заключается в том, чтобы использовать больше sed less xargs. Это также немного более «отлаживается».
По существу, вы можете полностью генерировать текст вашей желаемой команды с помощью sed
. ] sed -s 's / \ (. * \) \. tif $ / geotifcp -e \ 1.tfw \ 1.tif geo_ \ 1.tif /' output.list & gt; process.sh
Я знаю, регулярное выражение выглядит ужасно, но вот грубое объяснение содержания в одинарных кавычках: 's / A / B /' заменяет A с BA в нашем случае (что-то) .tif (обратите внимание, что нам нужно избегать скобок). Что-то хранится в \ 1 и используется для сборки команды geotifcp (которая есть B).
Возможно, вы используете аргументы командной строки.
Попробуйте этот скрипт bash:
#! / bin / bash echo «Первый аргумент равен $ 1» echo «Второй аргумент равен $ 2»
Если имя файла сценария равно test1.sh
, вы получите следующее: [ ! d10]
a @ u1104: ~ $ chmod + x test1.sh a @ u1104: ~ $ ./test1.sh Первый аргумент - второй аргумент - это @ u1104: ~ $ ./test1.sh file1 .tif file2.tiw Первым аргументом является file1.tif Второй аргумент - file2.tiw
Другим компонентом будет цикл через ваш файл. Вы можете сделать это следующим образом:
cat test | во время чтения строки; do echo "$ {line}" done
Вместо echo "$ {line}"
вы можете, например, выполнить ./ test1. sh $ {line} .tif $ {line} .tiw
Я предлагаю вам посмотреть на
sed #, чтобы манипулировать текстовым выходом, например, ls
и
xargs #, чтобы использовать некоторый вход std для генерации (многих) новых команд
в сочетании с конвейером вывода одной команды на вход следующего (например, от ls до sed to xargs)
Чтобы, скажем, у вас есть каталог с * tif и * tfw файлом. Вы хотите что-то сделать с файлами tif, используя соответствующий файл tfw. Предположим также, что для каждого файла tif существует tfw-файл с тем же именем
# список всех этих файлов tif в одном длинном столбце ls -1 * .tif # chop of the end. * tif оставляя вас с базовым именем ls * .tif | sed -s 's / \. tif $ //' # передать предыдущее в xargs, чтобы пометить tif с информацией в tfw и # create new geo _ *. tif file ls * .tif | sed -s '/ \. tif $ //' | xargs -i -t geotifcp -e {} .tfw {} .tif geo _ {}. tif
Последняя строка может в значительной степени сделать то, что вам нужно за один длинный (трудно читаемый) командной строки без скриптов.
Чтобы помочь понять, вы также можете сначала создать список файлов, как вы это делали:
ls * tif & gt; output.list
Затем очистите его с помощью sed, чтобы убедиться, что он хорошо себя ведет.
sed -s 's / \. tif $ //' output.list & gt; clean_output.list
end, затем используйте xargs с опцией -p вместо -t, чтобы получить приглашение перед выдачей каждой команды:
cat clean_output. список | xargs -i -p geotifcp -e {} .tfw {} .tif geo _ {}. tif
EDIT: Вариант первого заключается в том, чтобы использовать больше sed less xargs. Это также немного более «отлаживается».
По существу, вы можете полностью генерировать текст вашей желаемой команды с помощью sed
. ] sed -s 's / \ (. * \) \. tif $ / geotifcp -e \ 1.tfw \ 1.tif geo_ \ 1.tif /' output.list & gt; process.sh
Я знаю, регулярное выражение выглядит ужасно, но вот грубое объяснение содержания в одинарных кавычках: 's / A / B /' заменяет A с BA в нашем случае (что-то) .tif (обратите внимание, что нам нужно избегать скобок). Что-то хранится в \ 1 и используется для сборки команды geotifcp (которая есть B).
Возможно, вы используете аргументы командной строки.
Попробуйте этот скрипт bash:
#! / bin / bash echo «Первый аргумент равен $ 1» echo «Второй аргумент равен $ 2»
Если имя файла сценария равно test1.sh
, вы получите следующее: [ ! d10]
a @ u1104: ~ $ chmod + x test1.sh a @ u1104: ~ $ ./test1.sh Первый аргумент - второй аргумент - это @ u1104: ~ $ ./test1.sh file1 .tif file2.tiw Первым аргументом является file1.tif Второй аргумент - file2.tiw
Другим компонентом будет цикл через ваш файл. Вы можете сделать это следующим образом:
cat test | во время чтения строки; do echo "$ {line}" done
Вместо echo "$ {line}"
вы можете, например, выполнить ./ test1. sh $ {line} .tif $ {line} .tiw
Предлагаю вам взглянуть на
sed #, чтобы манипулировать текстовым выходом, например, ls
и
xargs #, чтобы использовать некоторый вход std для генерации (многих) новых команд
в сочетании с конвейером вывода одной команды на вход следующего (например, от ls до sed to xargs)
Чтобы, скажем, у вас есть каталог с * tif и * tfw файлом. Вы хотите что-то сделать с файлами tif, используя соответствующий файл tfw. Предположим также, что для каждого файла tif существует tfw-файл с тем же именем
# список всех этих файлов tif в одном длинном столбце ls -1 * .tif # chop of the end. * tif оставляя вас с базовым именем ls * .tif | sed -s 's / \. tif $ //' # передать предыдущее в xargs, чтобы пометить tif с информацией в tfw и # create new geo _ *. tif file ls * .tif | sed -s '/ \. tif $ //' | xargs -i -t geotifcp -e {} .tfw {} .tif geo _ {}. tif
Последняя строка может в значительной степени сделать то, что вам нужно за один длинный (трудно читаемый) командной строки без скриптов.
Чтобы помочь понять, вы также можете сначала создать список файлов, как вы это делали:
ls * tif & gt; output.list
Затем очистите его с помощью sed, чтобы убедиться, что он хорошо себя ведет.
sed -s 's / \. tif $ //' output.list & gt; clean_output.list
end, затем используйте xargs с опцией -p вместо -t, чтобы получить приглашение перед выдачей каждой команды:
cat clean_output. список | xargs -i -p geotifcp -e {} .tfw {} .tif geo _ {}. tif
EDIT: Вариант первого заключается в том, чтобы использовать больше sed less xargs. Это также немного более «отлаживается».
По существу, вы можете полностью генерировать текст вашей желаемой команды с помощью sed
. ] sed -s 's / \ (. * \) \. tif $ / geotifcp -e \ 1.tfw \ 1.tif geo_ \ 1.tif /' output.list & gt; process.sh
Я знаю, регулярное выражение выглядит ужасно, но вот грубое объяснение содержания в одинарных кавычках: 's / A / B /' заменяет A с BA в нашем случае (что-то) .tif (обратите внимание, что нам нужно избегать скобок). Что-то хранится в \ 1 и используется для сборки команды geotifcp (которая есть B).
Возможно, вы используете аргументы командной строки.
Попробуйте этот скрипт bash:
#! / bin / bash echo «Первый аргумент равен $ 1» echo «Второй аргумент равен $ 2»
Если имя файла сценария равно test1.sh
, вы получите следующее: [ ! d10]
a @ u1104: ~ $ chmod + x test1.sh a @ u1104: ~ $ ./test1.sh Первый аргумент - второй аргумент - это @ u1104: ~ $ ./test1.sh file1 .tif file2.tiw Первым аргументом является file1.tif Второй аргумент - file2.tiw
Другим компонентом будет цикл через ваш файл. Вы можете сделать это следующим образом:
cat test | во время чтения строки; do echo "$ {line}" done
Вместо echo "$ {line}"
вы можете, например, выполнить ./ test1. sh $ {line} .tif $ {line} .tiw