Mam kod PHP, który generuje nazwę pliku, do którego wget doda swoje logi. Wygenerowałem ponad 2000 plików, ale problem polega na tym, że mam z nimi problem, ponieważ pomyliłem się, wpisując PHP_EOL
jako część jego nazwy, kod ten doda
LF/line feed/%0A
nazwę
Przykład takiej nazwy pliku (przy dostępie przez przeglądarkę, po umieszczeniu na / var / www / html) http://xxxx/wget_01_a%0a.txt
zwróć uwagę %0a
na nazwę przed rozszerzeniem
Pomyliłem się i chciałbym, aby była partia zmiany nazwy, która przeszuka wszystkie pliki, a jeśli ją znajdzie line feed
, zmieniłaby nazwę bez wiersza, więc po prostu byłabyhttp://xxxx/wget_01_a.txt
Nie jestem do końca pewien, jak sobie z tym poradzić, ponieważ wydaje się, że kiedy ls
na kitach pojawia się cała postać specjalna, która nie ogranicza się tylko do niechcianego char, staje się ?
tym, co chcę tylko celować, to linijka.
\n
? Czy możesz zrobić coś takiego jak echo*.txt | od -c
, abyśmy mogli zobaczyć, jaki jest rzeczywisty znak, który nie może być wydrukowany?\n
pastebin.com/wXCDCJjr*.txt
(co wyjaśnia, dlaczegorename
go nie pobiera). Jeśli ustawisz dwa wzorce na, powiedzmy,txt
zamiast$'\n'
i''
, czy uzyskasz jakieś wyniki? Czy echo $ '\ n' rzeczywiście drukuje dwie nowe linie?rename $'\r' '' wget_*
aby to zadziałałoOpierając się na tym, na co już udzielono odpowiedzi, uogólniłem go, aby zmienić nazwę wszystkich plików zawierających wiersz polecenia w bieżącym folderze i podfolderze, łącząc polecenie find ze zmianą nazwy -
Tutaj polecenie find lokalizuje wszystkie pliki zawierające przesunięcie wiersza, a polecenie zmiany nazwy zastępuje każde przesunięcie wiersza w nazwie spacją.
To samo można zrobić dla wszelkich innych takich problematycznych znaków, takich jak powrót karetki (\ r).
źródło