Восстановить USB-накопитель в стандартном состоянии для использования в Linux, Windows и т. д.

В последних [1] версиях GNU findutils и coreutils :

find /home/jeremy/source -print0 | 
    tail -z -n 1000 | 
    xargs -0 -r mv -t /home/jeremy/dest/

The -print0 , Параметры -z и -0 указывают всем трем инструментам использовать символ NUL в качестве разделителя имени файла / записи. Это делает безопасным использование этого конвейера с именами файлов, содержащими ЛЮБОЙ символ.

Если ваша версия tail (или head ) не поддерживает параметр -z , вы можете использовать новую строку в качестве разделителя имени файла (что будет будьте осторожны для ЛЮБОГО имени файла, кроме тех, которые содержат символы новой строки):

find /home/jeremy/source | 
    tail -n 1000 | 
    xargs -r -d '\n' mv -t /home/jeremy/dest/

BTW, xargs совсем не сложно. Это довольно простая команда, которая берет данные из стандартного ввода и использует их для запуска программ (при этом данные из стандартного ввода используются в качестве аргументов в командной строке этой программы). Это полезный инструмент, который стоит того небольшого количества времени, которое требуется для изучения.

Что еще более важно, в отличие от $ (ls ...) и подобных, использование xargs позволяет избежать большинства (все, если вы используете NUL в качестве разделителя) проблем с пробелами, подстановочными символами оболочки ( подстановочные знаки и т. д.) и другие раздражающие символы (которые являются вполне допустимыми символами в именах файлов, поэтому хорошо написанный сценарий позаботится о том, чтобы они не были нарушены).


[1] Я точно не знаю, когда head и tail получили параметры -z , но за последние несколько лет многие инструменты GNU (включая sort ) получили возможность использовать NUL в качестве разделителя входных записей. До этого было всего несколько инструментов вроде find и xargs .

Это чрезвычайно полезно, так как теперь вы можете использовать эти параметры -z или -Z или -0 и т. Д. Для создания длинных сложных конвейеров без каких-либо необходимость потерять это полезное NUL-разделение.

4
27.10.2017, 12:47
0 ответов

Теги

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