Перемещение всех файлов из одной папки в другую на основе списка [дубликат]

$ sudo nano /etc/apt/sources.list

В конце каждой строки добавьте слова contrib non-free следующим образом:

deb http://ftp.uk.debian.org/debian/ jessie main contrib non-free
deb-src http://ftp.uk.debian.org/debian/ jessie main contrib non-free

deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free

# jessie-updates, previously known as 'volatile'
deb http://ftp.uk.debian.org/debian/ jessie-updates main contrib non-free
deb-src http://ftp.uk.debian.org/debian/ jessie-updates main contrib non-free

Затем:

$ sudo apt-get update 
$ sudo apt-get install flashplugin-nonfree

Ссылка: https://www.lifewire.com/get-flash-to-work-iceweasel-debian-2202059

7
10.07.2017, 16:08
5 ответов

Я предполагаю, что у вас есть только имена файлов. Это самый простой способ сделать это, я думаю:

while IFS= read -r file; do mv -v "dirA/$file" "dirB/$file"; done < listfile.txt
2
27.01.2020, 20:14

Если вы предоставили основные утилиты GNU (или другие реализации с этими специфическими функциями ), вы можете использовать xargsдля создания списка аргументов для mvна основе списка файлов:

cd A
xargs -rd '\n' -- mv -t B -- < file-list.txt

Без утилит GNU вы все равно можете использовать цикл чтения while -. В Bash это может быть:

while IFS= read -r file; do
    mv "A/$file" "B/$file"
done < file-list.txt
5
27.01.2020, 20:14

Вы можете легко решить эту проблему в ViM с помощью этих 10 простых шагов:

  1. Откройте длинный список имен файлов в ViM.
  2. Введите qa, чтобы начать запись макроса с именем «a».
  3. Введите y$, чтобы скопировать (копию )имени файла.
  4. Введите imv A/, чтобы написать «mv A/» перед именем файла, затем нажмите Escape.
  5. Введите A B/, чтобы написать «B/» в конце строки, затем нажмите Escape.
  6. Введите pj^, чтобы вставить имя файла и перейти к началу следующей строки.
  7. Нажмите q, чтобы остановить запись макроса.
  8. Введите VG:normal @a, чтобы воспроизвести макрос "a" до конца файла.
  9. Введите :wq rename.shдля сохранения в виде сценария bash с именем «rename.sh» и выхода.
  10. Затем, наконец, в командной строке bash введите chmod +x rename.sh;./rename.sh, чтобы пометить сценарий как исполняемый и запустить его.
3
27.01.2020, 20:14

Вот вариант, совместимый с POSIX, без использования циклов. Элементы в file-list.txtразделяются символами новой строки.

cd A ; xargs -I{} -- mv -- {} B < file-list.txt

Очевидно, что этот вариант не позволяет использовать имена файлов, содержащие символы новой строки. Кроме того, он вызывает команду mvдля каждого файла отдельно.

Вариант Дэвида Ферстера использует расширения GNU xargsи mv. Он будет вызывать один экземпляр mvдля нескольких аргументов и будет более эффективным для длинных списков файлов. Он по-прежнему не разрешает имена файлов, содержащие символы новой строки. Чтобы обойти это ограничение, вы можете использовать опцию -0и разделять имена файлов символами\0(NULL ).

cd A ; xargs -r0 -- mv -t B -- < file-list.txt
0
27.01.2020, 20:14

Вы можете использовать rsyncдля их перемещения, предполагая, что ваш список файлов состоит из одного имени файла в строке.

rsync -av --remove-source-files --files-from filelist.txt sourceDir/ targetDir/

Если ваши файлы имеют абсолютные имена (, то есть имена начинаются с /), sourceDirдолжно быть /. В противном случае это должен быть корень относительных имен.

Пример

$ mkdir src dst
touch src/{one,two,three}
$ cat >filelist.txt <<EOF
one
two
EOF

$ ls src
one  three  two
$ ls dst

$ rsync -av --files-from filelist.txt --remove-source-files src/ dst/
building file list... done
one
two

sent 165 bytes  received 70 bytes  470.00 bytes/sec
total size is 0  speedup is 0.00

$ ls src
three
$ ls dst
one  two
10
27.01.2020, 20:14

Теги

Похожие вопросы