O seguinte deve fazer o truque: -
today='date +%Y-%m-%d'
ls -A src/ | while f='line'; do if [ ! -f "dst/*/$f" ]; \
then mkdir -p "dst/$today"; cp "src/$f" "dst/$today/$f"; fi; done
Notas: -
- Comparado com a alternativa de
for f in src/*; ...
, usarls
retira o diretório do nome da fonte e-A
inclui nomes de arquivos que começam com.
,. - Se houver subdiretórios em
src/
, você precisará usarfind
no diretório de origem e removersrc/
do nome com-printf %P\n
. - Se você não tiver o comando
line
, poderá usarwhile read f; ...
, mas isso não funcionará para nomes de arquivos com espaço em branco inicial e final (mesmoline
falhará se o nome do arquivo contiver uma nova linha caractere - para isso você precisaria usarfind -print0
exargs -0
).