Определить тип файла, если ls -l показывает? (вопросительный знак)

Вы можете использовать sed для удаления дубликаты из строки:

for f in *; do
  r=$(echo $f | sed -r "s/(.*)(\{Sci-Fi\}|\{Science Fiction\})(.*)(\{Sci-Fi\}|\{Science Fiction\})(.*)/\1\2\3\5/g");
  echo $r;
done

Замените echo $ f на mv "$ f" "$ r" , если вам нравится вывод.

Вышеупомянутая строка sed возьмет первое совпадающее слово и удалит второе, если вы хотите всегда отдавать приоритет Sci-Fi над Science Fiction , даже когда существует только Научная фантастика , вы можете сделать это в два этапа:

for f in *; do
  r=$(echo $f | sed "s/{Science Fiction}/{Sci-Fi}/");
  s=$(echo $r | sed -r "s/(.*)(\{Sci-Fi\})(.*)(\{Sci-Fi\})(.*)/\1\2\3\5/g");
  if [ "$f" != "$s" ]; then
    echo "moving " $f " to " $s
  fi
done
0
30.12.2018, 03:07
1 ответ

Если ls -lпоказывает вопросительный знак(?)в качестве первого символа в строке, это означает, что тип файла не является нормальным, распознаваемым системой. Файл не обычный файл, не каталог, не символическая ссылка и т.д.

Это может произойти при монтировании не -собственной файловой системы (, например, файловой системы Solaris с дверями ). В этом случае вы можете или не можете взаимодействовать с файлом, открыв его.

Чаще всего это происходит при повреждении файловой системы. В этом случае размонтируйте файловую систему и запустите fsck. Возможно, вы потеряли некоторые данные.

Для lsнет возможности отображать числовое значение, которое кодирует тип файла. Если вы хотите показать числовой тип файла, вы можете использовать такие команды, как

strace -e lstat ls -ld the_file
strace -e lstat stat the_file
perl -e 'printf "0%o\n", (stat($ARGV[0]))[2]' the_file

Знание этого числового значения обычно мало полезно.

2
28.01.2020, 02:23

Теги

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