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
-
find
cria o diretório de destino (nenhum erro, se já existir). -
imprime%P
find
-delimited file-paths ($1
significa semawk
% path_do% directory-path). -
cp
cria os 2 caminhos de arquivo exigidos por
, como dois registros delimitados porxargs
.cp -T
-
tree
lê 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%