Você quer algo assim?
#!/usr/bin/env bash
## This is the target path, the directory
## you want to copy to.
target="some/path with/spaces";
## Find all files and folders in the current directory, sort
## them reverse alphabetically and iterate through them
find . -maxdepth 1 -type f | sort -r | while IFS= read -r file; do
## Set the counter back to 0 for each file
counter=0;
## The counter will be 0 until the file is moved
while [ $counter -eq 0 ]; do
## If the directory has no files
if find "$target" -maxdepth 0 -empty | read;
then
## Move the current file to $target and increment
## the counter.
mv -v "$file" "$target" && counter=1;
else
## Uncomment the line below for debugging
# echo "Directory not empty: $(find "$target" -mindepth 1)"
## Wait for one second. This avoids spamming
## the system with multiple requests.
sleep 1;
fi;
done;
done
Este script será executado até que todos os arquivos tenham sido copiados. Ele só copiará um arquivo para $target
se o destino estiver vazio, então ele irá travar para sempre, a menos que outro processo esteja removendo os arquivos assim que eles chegarem.
Ele será quebrado se os nomes dos arquivos 'ou $target
contiverem novas linhas ( \n
), mas devem ficar bem com espaços e outros caracteres estranhos.