Para copiar o arquivo mais antigo para ../complete :
cp -v "$(find ../in -maxdepth 1 -type f -printf '%T@ %pfind ../in -maxdepth 1 -type f -printf '%T@ %p$ ls -lt ../in/
total 0
-rw-r--r-- 1 user user 0 Jun 24 08:18 file2
-rw-r--r-- 1 user user 0 Jun 24 08:18 file3
-rw-r--r-- 1 user user 0 Jun 24 08:18 file4
-rw-r--r-- 1 user user 0 Jun 24 08:18 file5
-rw-r--r-- 1 user user 0 Jun 24 08:17 file_oldest
$ cp -v "$(...)" ../complete
'../in/file_oldest' -> '../complete/file_oldest'
$
$ find ... | xargs ... ../error
'../in/file2' -> '../error/file2'
'../in/file3' -> '../error/file3'
'../in/file4' -> '../error/file4'
'../in/file5' -> '../error/file5'
' | sort -zn | \
sed -zn '2,$s/[0-9,\.]\+ //p' | xargs -0 cp -vt ../error
' | sort -zn | \
sed -zn '1s/[0-9,\.]\+ //p')" ../complete
Para copiar o todo, exceto o mais antigo para ../error :
cp -v "$(find ../in -maxdepth 1 -type f -printf '%T@ %pfind ../in -maxdepth 1 -type f -printf '%T@ %p$ ls -lt ../in/
total 0
-rw-r--r-- 1 user user 0 Jun 24 08:18 file2
-rw-r--r-- 1 user user 0 Jun 24 08:18 file3
-rw-r--r-- 1 user user 0 Jun 24 08:18 file4
-rw-r--r-- 1 user user 0 Jun 24 08:18 file5
-rw-r--r-- 1 user user 0 Jun 24 08:17 file_oldest
$ cp -v "$(...)" ../complete
'../in/file_oldest' -> '../complete/file_oldest'
$
$ find ... | xargs ... ../error
'../in/file2' -> '../error/file2'
'../in/file3' -> '../error/file3'
'../in/file4' -> '../error/file4'
'../in/file5' -> '../error/file5'
' | sort -zn | \
sed -zn '2,$s/[0-9,\.]\+ //p' | xargs -0 cp -vt ../error
' | sort -zn | \
sed -zn '1s/[0-9,\.]\+ //p')" ../complete
Explicação :
-
%código%
-
finddesce apenas 1 nível; portanto, ele não pesquisará o diretório negativamente. -
-maxdepth 1corresponde apenas a arquivos. -
-type fum formato de saída personalizado.-printf '...'fornece a hora da última modificação do arquivo em um registro de data e hora,%T@é o nome do arquivo. Observe o%pno final. Os arquivos são impressos delimitados por byte nulo, não delimitados por nova linha, porque a nova linha provavelmente poderia ser um caractere no nome do arquivo, o que quebraria o comando.
-
-
lerá a saída delimitada por byte nulo (sort -zn-z) e classificará numericamente (-n). -
sed -znlê a saída delimitada por byte nulo.-
1corresponderá apenas à primeira linha (primeiro comando) e2,$corresponderá a todos os outros (segundo comando) -
s/[0-9,\.]\+ //premoverá o timestamp principal da saída.
-
- Apenas do segundo comando:
xargs -0 cp -vt ../errorprocessa a saída delimitada por byte nulo (-0) e chamacp -vt ../errorem toda entrada, que copia os arquivos.
Exemplo de saída :
%pre%