sudo dpkg --configure -a
Исправлены сломанные пакеты
Как уже указывалось, разбор ls является хрупким. Он сломается, если ваши имена файлов имеют какой-либо тип странности (пробелы, символы новой строки, управляющие символы и т. Д.). Поскольку вы хотите заменить пробелы на _, ваш предложенный подход не удастся. Безопасный способ сделать это будет:
stat --printf '%n/%Y\0' * | sort -rz -t'/' -k 2 | head -z -n 3 |
cut -d'/' -z -f 1 | xargs -0 perl-rename 's/ /_/g'
stat --printf '%n/%Y\0' *: это выведет имя (%n) каждого файла или каталога в текущем каталоге, за которым следует слэш (/, Я использую косую черту, поскольку это недопустимо в имени файла, поэтому можно безопасно использовать ее как разделитель) и время модификации файла в секундах с момента эпохи (%Y) и, наконец, символ NULL (\0), , sort -rz -k 2: для этого потребуется NULL-разделенный вход (-z) и отсортировать его в обратном порядке (-r) на основе значения во втором поле / -сепарализованного (-t'/') каждой строки ([ F14]). head -z -n 5: сохранить первые 5 (-n 5) нулевых разделов (-z). cut -d'/' -z -f 1: распечатать 1-е (-f 1) / -сепарализованное (-d /) поле с нулевым ограничением (-z). Я просто дал ls -q попытку:
IFS='
'
for file in `ls -tr1q|tail -n5`; do
rename 's/ /_/g' "$file"
done
Требуется ли переименование, даже для имен файлов с новой строкой или другими управляющими символами, хотя и дает ошибку:
Unsuccessful stat on filename containing newline at /usr/bin/rename line 59
(с perl v5.20.2)
Я просто дал ls -q попытку:
IFS='
'
for file in `ls -tr1q|tail -n5`; do
rename 's/ /_/g' "$file"
done
Требуется ли переименование, даже для имен файлов с новой строкой или другими управляющими символами, хотя и дает ошибку:
Unsuccessful stat on filename containing newline at /usr/bin/rename line 59
(с perl v5.20.2)
Как уже указывалось, разбор ls является хрупким. Он сломается, если ваши имена файлов имеют какой-либо тип странности (пробелы, символы новой строки, управляющие символы и т. Д.). Поскольку вы хотите заменить пробелы на _, ваш предложенный подход не удастся. Безопасный способ сделать это будет:
stat --printf '%n/%Y\0' * | sort -rz -t'/' -k 2 | head -z -n 3 |
cut -d'/' -z -f 1 | xargs -0 perl-rename 's/ /_/g'
stat --printf '%n/%Y\0' *: это выведет имя (%n) каждого файла или каталога в текущем каталоге, за которым следует слэш (/, Я использую косую черту, поскольку это недопустимо в имени файла, поэтому можно безопасно использовать ее как разделитель) и время модификации файла в секундах с момента эпохи (%Y) и, наконец, символ NULL (\0), , sort -rz -k 2: для этого потребуется NULL-разделенный вход (-z) и отсортировать его в обратном порядке (-r) на основе значения во втором поле / -сепарализованного (-t'/') каждой строки (-k 2). head -z -n 5: сохранить первые 5 (-n 5) нулевых разделов (-z). cut -d'/' -z -f 1: распечатать 1-е (-f 1) / -сепарализованное (-d /) поле с нулевым ограничением (-z). Я просто дал ls -q попытку:
IFS='
'
for file in `ls -tr1q|tail -n5`; do
rename 's/ /_/g' "$file"
done
Требуется ли переименование, даже для имен файлов с новой строкой или другими управляющими символами, хотя и дает ошибку:
Unsuccessful stat on filename containing newline at /usr/bin/rename line 59
(с perl v5.20.2)
Как уже указывалось, разбор ls является хрупким. Он сломается, если ваши имена файлов имеют какой-либо тип странности (пробелы, символы новой строки, управляющие символы и т. Д.). Поскольку вы хотите заменить пробелы на _, ваш предложенный подход не удастся. Безопасный способ сделать это будет:
stat --printf '%n/%Y\0' * | sort -rz -t'/' -k 2 | head -z -n 3 |
cut -d'/' -z -f 1 | xargs -0 perl-rename 's/ /_/g'
stat --printf '%n/%Y\0' *: это выведет имя (%n) каждого файла или каталога в текущем каталоге, за которым следует слэш (/, Я использую косую черту, поскольку это недопустимо в имени файла, поэтому можно безопасно использовать ее как разделитель) и время модификации файла в секундах с момента эпохи (%Y) и, наконец, символ NULL (\0), , sort -rz -k 2: для этого потребуется NULL-разделенный вход (-z) и отсортировать его в обратном порядке (-r) на основе значения во втором поле / -сепарализованного (-t'/') каждой строки (-k 2). head -z -n 5: сохранить первые 5 (-n 5) нулевых разделов (-z). cut -d'/' -z -f 1: распечатать 1-е (-f 1) / -сепарализованное (-d /) поле с нулевым ограничением (-z).