Você poderia tentar isso. Trabalha com o bash.
while read file
do
mv -v -i "$file" ~/NewDirectory/
done < listoffiles.txt
Sou um novato em linha de comando tentando descobrir o comando apropriado para executar o seguinte no Terminal no Mac OS X.
Supondo que coloquei todos os arquivos no mesmo diretório, quero isolar e mover um conjunto selecionado de arquivos de diretório listados em um arquivo de texto para um novo diretório, como faço para:
leia a lista selecionada de nomes de arquivos listados em um arquivo .txt
encontre todas as correspondências por nome de arquivo
isole e mova todas as correspondências de arquivo para um novo diretório
Eu encontrei este comando para encontrar (um ou ambos) um filestring.filetype em um diretório atual e mover todas as correspondências para um novo diretório:
find . -type f -iname "filestring.filetype" -print0 |
xargs -0 -J % mv % ~/NewDirectory/
E eu encontrei este comando tar
no entanto, ele cria uma cópia arquivada de cada nome de arquivo listado em filename.txt
tar -cf - -T filename.txt | (cd /path/to/new/dir && tar -xvf -)
Qualquer ajuda é muito apreciada!
A seguinte solução foi fornecida por uma fonte confiável:
cat "filename.txt" | xargs -I % mv % ~/NewDirectory/
Você poderia tentar isso. Trabalha com o bash.
while read file
do
mv -v -i "$file" ~/NewDirectory/
done < listoffiles.txt
A solução find ... xargs
que você sugeriu funciona para mim usando Bash version 3.2.48(1)-release
no Mac OS X 10.6.8.
mkdir -v -p ~/NewDirectory
find . -type f -maxdepth 1 -iname "*.pdf" -print0 |
xargs -0 -J % mv -i -v % ~/NewDirectory
Se você for usar um arquivo de texto contendo os caminhos completos dos arquivos a serem movidos, certifique-se de que cada caminho de arquivo armazenado no arquivo de texto seja terminado por um byte nulo. Dessa forma, até mesmo caracteres de nova linha nos seus caminhos de arquivo não serão motivo de preocupação para você no futuro.
# some tests
mkdir -v -p ~/NewDirectory
find "${PWD}" -type f -maxdepth 1 -print0 > listoffiles.txt
xargs -0 -n 1 ls -l <listoffiles.txt
# use a grep regex filter on file paths
grep -az 'bash' listoffiles.txt | xargs -0 -n 1 ls -l
xargs -0 -n 1 sh -c 'echo mv -v -i "$1" ~/NewDirectory' _ <listoffiles.txt
xargs -0 -J % ls -ld % ~/NewDirectory <listoffiles.txt
xargs -0 -J % mv -i -v % ~/NewDirectory <listoffiles.txt
Para depurar seu código em Bash
use:
#help set
set -Eeuxv -o pipefail +H # for debugging
trap 'printf "%s\n" "$?"; trap - EXIT' EXIT HUP INT QUIT PIPE TERM ERR