TR цикличного выполнения управляет для удаления '\r' в нескольких файлах в каталоге

У меня есть приблизительно 260 файлов в каталоге. Как я могу ввести эти файлы один за другим в некоторую вещь как это
file имя массива

file=input stream of multiple files 
x=0

LOOP
tr -d '\r'  file2
rm $file
mv file2 $file
x=$x+1
LOOP ends
0
задан 23 June 2015 в 08:11

2 ответа

Используя find острота:

find . -maxdepth 1 -type f -exec sh -c '< "{}" tr -d "\r" > "{}.processed"' \;

Это создаст разделенную возвратами каретки копию каждого файла в текущем рабочем каталоге, названном как исходный файл с .processed расширение.

tr может только для чтения от stdin, таким образом, это не может отредактировать файлы, оперативные исходно, однако один взлом должен перенаправить содержание файла к stdin из подоболочки и перенаправить его как здесь строка к tr stdin, так, чтобы файл был считан перед усечением, необходимым для записи происходит файл:

find . -maxdepth 1 -type f -exec bash -c '<<< "$(< {})" tr -d "\r" > {}' \;
1
ответ дан 4 October 2019 в 02:36

Используя perl

perl -i -pe 'tr/\r//d' <your_file>

и с find для всех файлов в Вашей папке:

  • долгая короткая версия версии

    find <your_path> -maxdepth 1 -type f -print0 | xargs -I{} -0 perl -i -pe 'tr/\r//d' {}
    
  • find <your_path> -maxdepth 1 -type f -exec perl -i -pe 'tr/\r//d' {} \;
    
<час>

Пример

$ printf "%s\n%s\n" "line 1" "line 2" > foo
$ printf "%s\r\n%s\n" "line 1" "line 2" > bar

$ hexdump foo
0000000 696c 656e 3120 6c0a 6e69 2065 0a32     
000000e

$ hexdump bar
0000000 696c 656e 3120 0a0d 696c 656e 3220 000a
000000f

$ perl -i -pe 'tr/\r//d' bar

$ hexdump bar
0000000 696c 656e 3120 6c0a 6e69 2065 0a32     
000000e
1
ответ дан 4 October 2019 в 02:36

Другие вопросы по тегам:

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