Usando -delimited strings, isso pode manipular spaces\n e mkdir -p em nomes de arquivos.
cd "${PROJECT_DIR%/*}"
outdir="output"; mkdir -p "$outdir"
find "$PROJECT_DIR" -type f -name '*.log' -printf "%pprojectdir
├── file0.txt
├── file1.log
└── subdir
├── file2.log
└── subsubdir
└── file3.log
2 directories, 4 files
${outdir}/%Poutput
├── file1.log
├── #subdir#file2.log
└── #subdir#subsubdir#file3.log
0 directories, 3 files
" |
awk 'BEGIN{FS="/";RS=ORS="cd "${PROJECT_DIR%/*}"
outdir="output"; mkdir -p "$outdir"
find "$PROJECT_DIR" -type f -name '*.log' -printf "%pprojectdir
├── file0.txt
├── file1.log
└── subdir
├── file2.log
└── subsubdir
└── file3.log
2 directories, 4 files
${outdir}/%Poutput
├── file1.log
├── #subdir#file2.log
└── #subdir#subsubdir#file3.log
0 directories, 3 files
" |
awk 'BEGIN{FS="/";RS=ORS="%pre%"}
NR%2||NF==2 {print; next}
{gsub("/","#"); sub("#","/#"); print}' |
xargs -0 -n2 cp -T
"}
NR%2||NF==2 {print; next}
{gsub("/","#"); sub("#","/#"); print}' |
xargs -0 -n2 cp -T
-
findcria o diretório de destino (nenhum erro, se já existir). -
imprime%Pfind-delimited file-paths ($1significa semawk% path_do% directory-path). -
cpcria os 2 caminhos de arquivo exigidos por, como dois registros delimitados porxargs.cp -T -
treelê os caminhos de arquivotree-delimited, 2 por vez, e os passa para %code%
Aqui está %code% do diretório source de teste '
%pre%Aqui está o %code% do diretório destino '
%pre%