Si no puede usar rsync
y desea eliminar los archivos de origen solo después de que cada archivo se haya copiado correctamente, puede hacer algo como esto para un directorio -por -directorio, archivo -por -transferencia de archivos:
if cd /path/to/files; then
for file in *; do
if scp -pr "$file" user@remotehost.example.com:/destination/files/"$file"; then
rm -fr "$file"
else
echo "Transfer of '$file' failed. Not removing local copy." 1>&2
fi
done; fi
Si desea realizar una verificación de cordura adicional -antes de eliminar el archivo local, puede agregar una verificación de coherencia, pero esto ralentizará las cosas para archivos muy grandes, y esto rápido -y -sucio la suma de comprobación solo funcionará en archivos; no directorios:
if cd /path/to/files; then
for file in *; do
if scp -pr "$file" user@remotehost.example.com:/destination/files/"$file"; then
if [[ "$(md5sum < "$file" )" = "$( ssh user@remotehost.example.com md5sum < /destination/files/"$file" )" ]]; then
rm -fr "$file"
else
echo "Unable to validate remote '$file'. Not removing local copy" 1>&2
fi
else
echo "Transfer of '$file' failed. Not removing local copy." 1>&2
fi
done; fi
Похоже, вы хотите объединить содержимое двух файлов, пропустив первую строку каждого файла.
Получить все, кроме первой строки файла, можно разными способами, например, с помощьюawk
:
awk 'FNR > 1' file
С помощью awk
на самом деле довольно легко делать то, что вы хотели бы сделать с этой точной awk
программой:
$ awk 'FNR > 1' file1 file2
4 5
5 6
7 6
1 4
FNR
— это переменная, поддерживаемая awk
, которая содержит текущий номер записи (номер строки по умолчанию )в текущем файле. Если FNR
в этой программе строго больше 1, то текущая строка в текущем файле не является первой строкой этого файла. Программа только с таким условием вызовет печать строк, для которых условие истинно.
Используя sed, я сделал по методу ниже
sed -n -e '1!p' f1 ;sed -n -e '1!p' f2
выход
4 5
5 6
7 6
1 4
Для полноты картины вот решение на основе GNUtail
-
tail -q -n +2 file1 file2