Наконец корректный ответ на эту ошибку также:
QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed
QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed
Это не имеет никакого отношения к Вашим установленным шрифтам, но с недостающими glibc-пакетами.
Обратите внимание что стандартная команда (POSIX/Unix) для создания a tar
файл pax
. pax
комбинирует традиционное cpio
и tar
команды.
Для создания файла tar используйте режим записи:
pax -w < abc.txt > allfiles.tar
Для копирования вместо этого, используйте режим копии:
pax -rw < abc.txt Folder/
Обратите внимание, что это воссоздает структуру каталогов в Folder
. Если Вы хотите сгладить его, Вы могли бы сделать:
pax -rws '|.*/||' < abc.txt Folder/
(см. страницу справочника, если Вы хотите скопировать полномочия или другие атрибуты также. pax
ожидает один файл на строку, что означает файлы, имя которых содержит символы новой строки, не может быть скопирован тот путь, некоторые pax
реализации поддерживают a -0
опция позволить a NUL
разграниченный список файлов вместо этого).
С cpio
:
cpio -pd < abc.txt Folder/
С GNU tar
:
tar -cf - -T abc.txt | (cd Folder && tar xf -)
Другая опция позволить любой символ в именах файлов (с GNU cp
):
xargs cp -t Folder < abc.txt
(который сглаживает каталоги).
xargs
ожидает пробел (пространство, вкладка, новая строка) разделенный список, когда можно выйти из тех разделителей с обратной косой чертой, одинарными или двойными кавычками. Таким образом, у Вас может быть список как:
"file with space"
other-file
'file with "quote" and
newline'
Я не уверен, где Вы читаете, то CP имеет a --files-from
опция, но у меня, конечно, нет того GNU coreutils 8.22 использования.
Пока Ваши имена файлов не имеют никаких новых строк в них, можно сделать это (с bash4 +):
mapfile -t files < test1.txt
cp -- "${files[@]}" Folder/
Если у Вас нет bash4 +, то можно вручную заполнить массив и использовать его (или просто звонить cp
непосредственно из read
для каждого файла, но это будет медленнее):
while IFS= read -r file; do
files+=( "$file" )
done < test1.txt
cp -- "${files[@]}" Folder/
Можно достигнуть этого простым сценарием удара:
for i in $(cat path_to_abc.txt)
do
cp "$i" path_to_Folder
done
Более безопасный путь, который может иметь дело с произвольными именами файлов:
while IFS= read -r file; do
cp -- "$file" path_to_Folder
done
$IFS
, который довольно возможен.
– Chris Down
22.12.2013, 11:06
-
. set -f; IFS=$'\n'; cp -- $(cat path_to_abc.txt) path_to_folder
не имел бы тех проблем. (формат файла списка не может позволить новые строки так или иначе)
– Stéphane Chazelas
22.12.2013, 16:02
cp
не имеет опции --files-from
(по крайней мере, GNU cp
не имеет ), но rsync
имеет:
rsync --files-from abc.txt -av / Folder/
/
используется, если ваш файл test.txt
содержит файлы с абсолютными путями. В противном случае это должен быть корень источника.
Если ваши файлы завершаются нулем -, а не символом новой строки -, вы должны включить опцию --from0
.
Если вы просто хотите скопировать файлы с похожими именами, вы можете использовать это:
Перейти в исходную папку
cp $(ls | grep 'one' | grep 'two') /tmp/
Таким образом, все файлы, содержащие строку один и два в своих именах, будут скопированы в каталог tmp
cpio -pd < abc.txt Folder/
- это работало на меня, хотя имена файлов содержали пробелы, где другие подходы перестали работать. "Linux" – david 17.09.2015, 13:53xargs
подходы из Ваших и других ответов и они все перестали работать, то же как значение по умолчаниюcp
варианты. – david 17.09.2015, 15:52xargs
, как я сказал в своем ответе, необходимо написать список в формате, ожидаемомxargs
, который не находится на пути на строку. – Stéphane Chazelas 17.09.2015, 18:17