Mova vários arquivos da lista de nomes de arquivos para uma nova pasta

Mova vários arquivos da lista de nomes de arquivos para uma nova pasta

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 findusar a nameopção e, finalmente, mvpara 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

informação relacionada