Переместить файлы обратно в исходное местоположение на основе текстового файла - PullRequest
0 голосов
/ 02 июля 2018

Я переместил кучу файлов с помощью команды mv -v. Итак, в конце у меня есть текстовый файл, содержащий что-то вроде этого: `

 /Volumes/[TV Shows]/Movie 1.avi --> /Volumes/Downloads/Movie 1.avi
 /Volumes/[TV Shows]/Movie 2.mp4 --> /Volumes/Downloads/Movie 2.mp4

`

Мне нужно переместить каждый файл из Downloads обратно в исходное местоположение на основе этого текстового файла. Исходным местоположением будет строка перед --> внутри моего текстового файла. Критерии соответствия: filename.

Любая помощь будет высоко ценится.

@ jeremysprofile

Мой файл можно найти здесь здесь

На моем Mac я использовал следующий код:

#!/bin/bash

while IFS= read -r line; do
    #use http://wiki.bash-hackers.org/syntax/pe#substring_removal to grab the parts we want
    origin=${line% --> *}
    current=${line#* --> }
    mv -- "$current" "$origin"
done < ~/Desktop/myTextFile.txt

Первые строки результата:

WYSIWYG:Desktop cip$ ./myMove.sh
mv: rename /Volumes/Public/English/[Sorted TV Shows]/Dimension/Dimension.404.s01e01.WEBDL.720p.NewStudio.TV.mkv -> /Volumes/Public/Downloads/from_tv_shows/Dimension.404.s01e01.WEBDL.720p.NewStudio.TV.mkv to /Volumes/Public/English/[Sorted TV Shows]/Dimension/Dimension.404.s01e01.WEBDL.720p.NewStudio.TV.mkv -> /Volumes/Public/Downloads/from_tv_shows/Dimension.404.s01e01.WEBDL.720p.NewStudio.TV.mkv: No such file or directory
mv: rename /Volumes/Public/English/[Sorted TV Shows]/Dimension/Dimension.404.S01E02.Polybius.HULU.WEBRip.x264-RBB.mp4 -> /Volumes/Public/Downloads/from_tv_shows/Dimension.404.S01E02.Polybius.HULU.WEBRip.x264-RBB.mp4 to /Volumes/Public/English/[Sorted TV Shows]/Dimension/Dimension.404.S01E02.Polybius.HULU.WEBRip.x264-RBB.mp4 -> /Volumes/Public/Downloads/from_tv_shows/Dimension.404.S01E02.Polybius.HULU.WEBRip.x264-RBB.mp4: No such file or directory
mv: rename /Volumes/Public/English/[Sorted TV Shows]/Dimension/Dimension.404.S01E03.Bob.HULU.WEBRip.x264-RBB.mp4 -> /Volumes/Public/Downloads/from_tv_shows/Dimension.404.S01E03.Bob.HULU.WEBRip.x264-RBB.mp4 to /Volumes/Public/English/[Sorted TV Shows]/Dimension/Dimension.404.S01E03.Bob.HULU.WEBRip.x264-RBB.mp4 -> /Volumes/Public/Downloads/from_tv_shows/Dimension.404.S01E03.Bob.HULU.WEBRip.x264-RBB.mp4: No such file or directory
mv: rename /Volumes/Public/English/[Sorted TV Shows]/Dimension/Dimension.404.S01E04.WEBRip x264-RMTeam.mkv -> /Volumes/Public/Downloads/from_tv_shows/Dimension.404.S01E04.WEBRip x264-RMTeam.mkv to /Volumes/Public/English/[Sorted TV Shows]/Dimension/Dimension.404.S01E04.WEBRip x264-RMTeam.mkv -> /Volumes/Public/Downloads/from_tv_shows/Dimension.404.S01E04.WEBRip x264-RMTeam.mkv: No such file or directory

Хочу отметить, что /Volume/Public правильно отображается на моем компьютере и что файлы существуют в расположении from_tv_shows:

WYSIWYG:Desktop cip$ find /Volumes/Public/Downloads/from_tv_shows/ -name 'Dimension.404.S01E04.WEBRip x264-RMTeam.mkv'
/Volumes/Public/Downloads/from_tv_shows//Dimension.404.S01E04.WEBRip x264-RMTeam.mkv
WYSIWYG:Desktop cip$ 

Что я делаю не так?

1 Ответ

0 голосов
/ 02 июля 2018
while IFS= read -r line; do
    #use http://wiki.bash-hackers.org/syntax/pe#substring_removal to grab the parts we want
    origin=${line% --> *}
    current=${line#* --> }
    mv -- "$current" "$origin" 
done < myTextFile.txt

Мы выполняем удаление подстроки, где % сохраняет все перед подстрокой (поэтому мы сохраняем все до --> ), а # сохраняет все после (поэтому мы сохраняем все после --> ), с * в качестве многосимвольного символа подстановки.

Здесь - это синтаксис bash «для строки в файле».

...