I used find to look for .pdf files on my second drive and there are hundreds of results from different subdirectories but I only needed to copy/move these particular pdf files to new directory.
I copy pasted their paths/filenames to moveme.txt.
I am thinking of cat moveme.txt | xargs command but i am stocked there. Please help.
I tried cat moveme.txt | xargs -0 -I % sh -c 'sudo mv -v % /new/directory/' and failed. How to do this right?
edit: I like to add that this path/filenames have spaces. Maybe it matters.
excerpt:
./busd/0128/csm/sorting/read-ables/linus/CLI/Bash-Beginners-Guide-new.pdf
./busd/0128/csm/3t2/readables/etc/xulin/Shell Scripting.pdf
./busd/0128/csm/dais6/Dearables/assorted/Bash Pocket Reference - Arnold Robbins.pdf
CodePudding user response:
This works even if your filenames contain spaces:
xargs -I {} sudo mv -v {} /new/directory </tmp/moveme.txt
I assume that moveme.txt contains one path to a file per line.
CodePudding user response:
Try with this:-
mv dir/* /dir2
CodePudding user response:
Suggesting to dry-run printing each ireversible mv cmd before execution:
awk '{cmd = "mv \"" $0 "\" /new/directory/"; print cmd}' moveme.txt
When read to execute mv command:
awk '{cmd = "mv \"" $0 "\" /new/directory/"; system cmd}' moveme.txt
Another option is to transform your moveme.txt file into a bash script using sed command and inspect moveme.sh before execution.
sed -r 's|(^$)|mv "\1" /new/directory/|' moveme.txt > moveme.sh
Inspect moveme.sh and run it.
chmod a x ./moveme.sh
bash ./moveme.sh
