Переменные не раскрываются в одинарных кавычках, а именно так вы передаете команды в первом случае. Таким образом, в первом случае оболочка на удаленной стороне никогда не получает ваши значения, она просто получает literal $1
и $2
, а их не существует, поэтому они расширяются в ничто. Поэтому
$ var=foo
$ echo '$var'
$var
$ echo "$var"
foo
pscp
не получает никаких значений, когда вы передаете $1
и $2
(потому что они не существуют в удаленной оболочке), поэтому он выдает ошибку при запуске. Вот как в итоге вызывается pscp
:
pscp -pw final_result.txt
Используйте двойные кавычки, когда вы хотите, чтобы переменные расширялись текущей оболочкой, а не одинарные кавычки. Использование одинарных кавычек в данном случае было бы уместно, если бы вы хотели, чтобы переменные были расширены оболочкой remote.
Основываясь на примерах, я предполагаю, что имена файлов имеют формат MMDDYY.txt
, где MM
— месяц, DD
— день, а YY
— год.
Вы можете изменить порядок символов для сортировки, используяsed
sed 's/\(....\)\(..\)/\2\1/'| sort | sed 's/\(..\)\(....\)/\2\1/'
или если ваш sed
поддерживает параметр -E
для расширенных регулярных выражений
sed -E 's/(....)(..)/\2\1/'| sort | sed -E 's/(..)(....)/\2\1/'
Первый sed
заменит первую группу из 4 символов(MMDD
)и вторую группу из 2 символов(YY
). Что бы ни последовало за (.txt
), это останется неизменным. Это изменит 100518.txt
на 181005.txt
и т. д. После сортировки символы заменяются обратно.
Этот сценарий предполагает, что список имен файлов уже отфильтрован и содержит только имена в правильном формате. В противном случае шаблоны соответствия должны быть более сложными, чтобы соответствовать только 6 числам, за которыми следует .txt
.
sort
без опции самая высокая дата будет последней, используйте sort -r
, чтобы изменить порядок
Если вы уже предполагаете, что временные метки находятся в поле 9, вы можете указать sort
выделить три поля даты:
sort -k9.24,9.25n -k9.20,9.21n -k9.22,9.23n FTP_FILES_LIST
Вот пример обработки вашего примера ввода с использованием опции --debug
сортировки GNU; вы можете увидеть ряд пунктирных линий, обозначающих ключи сортировки, которые sort
последовательно использовались для определения порядка:
-r-xr-xr-x 1 14 2000 34010091 Oct 05 00:42 AT_20_10_REL_ARCA_100518.txt
__
__
__
____________________________________________________________________________________
-r-xr-xr-x 1 14 2000 34025780 Nov 26 02:55 AT_20_10_REL_ARCA_112618.txt
__
__
__
____________________________________________________________________________________
-r-xr-xr-x 1 14 2000 34037370 Dec 19 22:10 AT_20_10_REL_ARCA_121918.txt
__
__
__
____________________________________________________________________________________
-r-xr-xr-x 1 14 2000 34037013 Jan 17 00:45 AT_20_10_REL_ARCA_011719.txt
__
__
__
____________________________________________________________________________________
-r-xr-xr-x 1 14 2000 34036101 Jan 18 11:13 AT_20_10_REL_ARCA_011819.txt
__
__
__
____________________________________________________________________________________
-r-xr-xr-x 1 14 2000 34036564 Jan 25 01:09 AT_20_10_REL_ARCA_012519.txt
__
__
__
____________________________________________________________________________________
-r-xr-xr-x 1 14 2000 34041306 Feb 03 21:42 AT_20_10_REL_ARCA_020319.txt
__
__
__
____________________________________________________________________________________
-r-xr-xr-x 1 14 2000 34099207 Feb 08 03:15 AT_20_10_REL_ARCA_020819.txt
__
__
__
____________________________________________________________________________________
-r-xr-xr-x 1 14 2000 34099827 Feb 11 02:55 AT_20_10_REL_ARCA_021119.txt
__
__
__
____________________________________________________________________________________
Выполнение сортировки таким способом является хрупким, поскольку оно зависит от того, что имена файлов начинаются с 9-го пробела -в поле с разделителями. Альтернативой может быть использование некоторой зависимости от самого шаблона имени файла, возможно, появление метки времени в 6-м символе подчеркивания -с разделителем:
sort -t_ -k6.5,6.6n -k6.1,6.2n -k6.3n,6.4n FTP_FILES_LIST