라는 디렉토리가 있고 Musique
ONLY를 사용하여 파일 목록을 저장하고 싶습니다.nom.txt
echo
그러나 디렉터리의 숨겨진 파일도 복사하고 \n
개행 문자( )를 사용하여 디렉터리의 "일반" 파일과 분리하고 싶습니다.
이 명령을 시도했지만 작동하지 않습니다. 왜 작동하지 않는지 모르겠습니다. :
echo -e Musique/ \n.* > nom.txt
echo -e \n.* Musique/ > nom.txt
echo -e /Musique \n.* > nom.txt
누군가 나에게 이것을 설명해 줄 수 있습니까? 감사해요
답변1
내가 올바르게 이해했다면 추가 정보를 얻을 때까지 다음 명령을 사용할 수 있습니다.
$ LC_ALL=C ls -1Ar | sed '0,/^\./s/^\./\n./' > nom.txt
$ cat nom.txt
b.txt
c.txt
.foo
.bar
답변2
따옴표가 없는 두 문자 하위 문자열은 \n
셸에서 로 변경됩니다 n
. 이는 각 명령줄이 문자열 ( 또는 ) 앞이나 뒤에 echo
문자열을 n.*
파일에 인쇄한다는 의미입니다 . 현재 디렉토리에 패턴과 일치하는 파일이 있는 경우 명령은 해당 파일을 .nom.txt
Musique/
/Musique
n.*
echo
echo -e
아마도 in 을 사용하고 있으므로 bash
C 이스케이프 시퀀스(예: 또는 )를 포함하는 인수로 제공된 모든 이름은 \n
인쇄하기 전에 \t
수정됩니다 .echo
당신은 말하지 않았지만 당신이 원하는 것이 구체적 으로 echo
. Musique
디렉토리 이름 자체.
디렉토리 아래의 모든 경로 이름 목록을 사용하는 것이 가장 쉽습니다 find
.
find Musique
위의 명령은 주어진 검색 경로를 재귀적으로 탐색하고 발견된 각 경로 이름을 자체 줄에 출력합니다. 하위 디렉터리로의 반복을 중지하려면 명령 끝에 find
이를 추가하세요 ( Linux 시스템과 같은 최신 구현을 사용한다고 가정).-maxdepth 1
find
숨겨지지 않은 이름에 대해서만 이 작업을 수행하십시오.
find Musique ! -name '.*'
또는 숨겨진 이름에만 해당됩니다.
find Musique -name '.*'
경로 이름을 공백으로 구분하여 한 줄에 표시한 다음 find
결과를 paste
.
find Musique -maxdepth 1 | paste -s -d ' ' -
생성된 경로 이름 목록 자체는 보는 것 외에는 쓸모가 없습니다. 예를 들어 Unix 시스템의 파일 이름에는 공백, 탭 및 줄 바꿈이 포함될 수 있으므로 파일 이름을 안정적으로 구별하는 것이 어려울 수 있습니다.
각 경로 이름에 대해 작업을 수행하려면 일반적으로 find
해당 조건자를 사용하여 -exec
명령에서 수행 할 수 있습니다.
답변3
나는 당신이 다음과 같은 것을 원하는 것 같아요 :
echo -e Musique/* '\n' Musique/.* >nom.txt