에코만 사용하여 디렉터리 내용(숨겨진 파일 포함)을 파일로 이동할 수 없는 이유는 무엇입니까?

에코만 사용하여 디렉터리 내용(숨겨진 파일 포함)을 파일로 이동할 수 없는 이유는 무엇입니까?

라는 디렉토리가 있고 MusiqueONLY를 사용하여 파일 목록을 저장하고 싶습니다.nom.txtecho

그러나 디렉터리의 숨겨진 파일도 복사하고 \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.txtMusique//Musiquen.*echo

echo -e아마도 in 을 사용하고 있으므로 bashC 이스케이프 시퀀스(예: 또는 )를 포함하는 인수로 제공된 모든 이름은 \n인쇄하기 전에 \t수정됩니다 .echo

당신은 말하지 않았지만 당신이 원하는 것이 구체적 으로 echo. Musique디렉토리 이름 자체.

디렉토리 아래의 모든 경로 이름 목록을 사용하는 것이 가장 쉽습니다 find.

find Musique

위의 명령은 주어진 검색 경로를 재귀적으로 탐색하고 발견된 각 경로 이름을 자체 줄에 출력합니다. 하위 디렉터리로의 반복을 중지하려면 명령 끝에 find이를 추가하세요 ( Linux 시스템과 같은 최신 구현을 사용한다고 가정).-maxdepth 1find

숨겨지지 않은 이름에 대해서만 이 작업을 수행하십시오.

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

관련 정보