두 가지 질문이 있습니다. 먼저, 어떤 명령이 파일과 디렉토리를 나열하지만 디렉토리를 먼저 나열합니까?
두 번째 질문 : 파일 목록을 단일 디렉토리에 복사하고 싶지만 대상 디렉토리를 명령의 첫 번째 파일 이름으로 만드십시오.
답변
GNU가 있습니까?
의 gnu 버전 ls
은 --group-directories-first
입니다. 그리고 cp
있다 -t
.
GNU가 없습니까?
gnu ‘s가없는 시스템 에서 / 와 적절한 옵션 ls
을 두 번 연속 호출하는 것이 가장 좋습니다 .find
-maxdepth n
-mindepth n
-type t
find . -maxdepth 1 -mindepth 1 -type d
find . -maxdepth 1 -mindepth 1 \! -type d
대상을 먼저 사용하여 파일을 복사하려면 첫 번째 인수를 저장 한 다음을 사용 shift
하고 인수를 끝에 추가 하는 스크립트를 작성 해야합니다.
#!/bin/sh
target="$1"
shift
cp -r -- "$@" "$target"
조심해!
당신이 함께 사용하는 방법에 대한 계획이 있다면 -에서 목록을 수집,이다 find
또는 ls
(아마도 사용하여 xargs
)과에 전달 cp
(또는 cp
래퍼), 당신은 무엇을 알고 있어야 위험 파일의 목록을 구문 분석에 거짓말 (기본적으로, 파일 이름이 수 스크립트를 망칠 수있는 개행 문자와 같은 문자를 포함합니다. 특히, 조사 find
의 -exec
및 -print0
옵션 xargs
의 -0
옵션을 선택합니다.
디렉토리 트리를 효율적으로 복사하기위한 대체 도구입니다.
rsync
대신 사용하는 것이 좋습니다. 작업을 쉽게 할 수있는 많은 기능이 있습니다.
답변
GNU 이외의 디렉토리를 먼저 나열 ls
:
ls -l | sort
이것은 심볼릭 링크, 소켓 및 파이프와 같은 다른 이상한 것들을 모두 나열하지만 (물론 그룹화 됨) 문제가되지 않아야한다는 것을 고려하는 것은 매우 드 rare니다. 그렇지 않으면 필터는ls -l | grep '^(-|d)' | sort
답변
bash 및 zsh에서 작동합니다.
~ / .bashrc 또는 ~ / .zshrc에 별칭을 추가하십시오.
# Colorize the ls output ##
alias ls='LC_COLLATE=C ls -h --group-directories-first --color=auto'
또한 ZSH가있는 경우 “k” 유틸리티를 사용할 수 있습니다
k -h --group-directories-first
~ / .zshrc에 다음을 넣어서 항원으로 설치하십시오.
antigen bundle reduxionist/k --branch=add-sort-options
답변
대한 zsh
의 완료 목록, 당신은 설정할 수 있습니다 list-dirs-first
에 스타일 true
디렉토리가 먼저 표시 할 수 있습니다. 당신의 ~/.zshrc
:
zstyle ':completion:*' list-dirs-first true
(여기서는이 를 지원하는 모든 완성 위젯과 모든 명령에 적용됩니다. 원하는 경우 자세한 내용은 zstyle
설명서를 참조하도록 제한 할 수 있습니다 )
아직 그렇게하지 않았다면 compinstall
, 설명 등을 포함한 색상으로 완성 목록을 얻으려면 실행해야합니다 .
답변
GNU가 아닌 경우 awk는 다른 모든 필드를 필터링 할 수 있습니다.
ls -l | sort -r | awk 'NF==9 { if ($1~/^d/) { print $9 "/" } else { print $9 } }'
- NF == 9 :
ls -l
9 개의 필드를 포함해야합니다. - 행이 ‘d’로 시작하면 추가 ‘/’를 인쇄합니다.
- 그렇지 않으면 파일 이름 만
결과는 다음과 ls -1
같지만 디렉토리를 먼저 넣습니다.
node_modules/
src/
e2e/
angular.json
tslint.json
package.json
README.md
ls 매뉴얼 페이지의 “긴 형식”에 따르면 다른 파일 형식이 포함 된 경우 출력 순서는 다음과 같아야합니다.
s Socket link.
p FIFO.
l Symbolic link.
d Directory.
c Character special file.
b Block special file.
- Regular file.
편리한 bash 함수 (.bash_profile 또는 .bashrc에 넣으십시오) :
function l1() {
ls -l $* | sort -r | awk 'NF==9 { if ($1~/^d/) { print $9 "/" } else { print $9 } }'
}