Eu tenho uma lista de nomes de arquivos em list.txt, que contém 'abc1.png, abc2.png, abc3.png....'.
No entanto, não conheço os diretórios onde estão os arquivos.
Quero encontrar todos os arquivos no arquivo txt e movê-los para uma nova pasta.
Responder1
Você precisaleia cada nome de arquivo linha por linha, então tente find
usar a name
opção e, finalmente, mv
para o alvo:
while IFS= read -r filename; do
find /somewhere -type f -name "$filename" -exec mv -- {} /somewhere/else/ \;
done < file.txt
O {}
será substituído pelo caminho do arquivo encontrado.
Responder2
Supondo que os nomes dos arquivos não contenham "," ou novas linhas e que cada arquivo exista em list.txt apenas uma vez. Naturalmente, você também precisa alterar o novo diretório para o diretório desejado. Se algum arquivo em list.txt estiver faltando, o arquivo não será copiado (e nenhuma informação será fornecida).
sed -s "s/, /\\n/g" list.txt | xargs -IFILE -n1 find -name FILE -exec mv {} newdirectory \;
Responder3
Isso é fácil com algum bash:
primeiro encontre seus arquivos com find e redirecione a saída em outro arquivo:
para argumento em $(cat list.txt); encontre / -name $arg -print >> files_with_path.txt; feito
então mv os arquivos:
para argumento em $(cat files_with_path.txt); faça mv $arg /seu/destino/pasta; feito