
하위 디렉터리에 내용이 저장되지 않은 아카이브를 다른 파일로 가득 찬 디렉터리로 추출했는데 지금은 어수선하고 혼란스럽습니다.
이 문제를 해결하기 위해 아카이브를 새로운 빈 디렉토리에 추출하고 거기에 나열된 디렉토리를 사용하여 혼합된 첫 번째 디렉토리에서 파일을 삭제하려고 합니다. 파일은 원래 '/usr/src/packages' 디렉토리에 추출되었으며 새 디렉토리는 입니다 ~/Programs/DBeaver
.
vfclists@hp01:~/Programs/DBeaver$ ls -l
total 216
-rw-r--r-- 1 vfclists vfclists 48943 Oct 23 23:28 artifacts.xml
drwxr-xr-x 4 vfclists vfclists 4096 Oct 23 23:28 configuration
-rwxr-xr-x 1 vfclists vfclists 79058 Oct 23 22:58 dbeaver
-rw-r--r-- 1 vfclists vfclists 206 Oct 23 23:28 dbeaver.ini
-rw-r--r-- 1 vfclists vfclists 7919 Oct 9 14:05 dbeaver.png
drwxr-xr-x 23 vfclists vfclists 4096 Oct 23 23:28 features
-rwxr-xr-x 1 vfclists vfclists 35021 Oct 23 22:58 icon.xpm
drwxr-xr-x 2 vfclists vfclists 4096 Oct 23 23:28 licenses
drwxr-xr-x 4 vfclists vfclists 4096 Oct 23 23:28 p2
drwxr-xr-x 6 vfclists vfclists 20480 Oct 23 23:28 plugins
-rw-r--r-- 1 vfclists vfclists 1791 Oct 23 23:28 readme.txt
vfclists@hp01:~/Programs/DBeaver$
그래서 내가 원하는 것은 출력을 ls
xargs로 파이프하는 것이지만 명령을 실행할 때 파일 이름 앞에 공백이 추가되어 이와 같은 테스트 출력을 얻습니다.
vfclists@hp01:~/Programs/DBeaver$ ls | xargs -n 1 echo rm /usr/src/packages/
rm /usr/src/packages/ artifacts.xml
rm /usr/src/packages/ configuration
rm /usr/src/packages/ dbeaver
rm /usr/src/packages/ dbeaver.ini
rm /usr/src/packages/ dbeaver.png
rm /usr/src/packages/ features
rm /usr/src/packages/ icon.xpm
rm /usr/src/packages/ licenses
rm /usr/src/packages/ p2
rm /usr/src/packages/ plugins
rm /usr/src/packages/ readme.txt
디렉토리와 파일을 구분하는 문제도 있는데, 이 부분을 먼저 다루고 싶습니다.
rm -rf
업데이트: 디렉토리와 파일에서도 잘 작동하는 것으로 나타났습니다. 이 경우에는 실제로 중요하지 않으므로 간단히 다음 rm xxxx
으로 바꿔야 합니다.rm -rf xxxx
답변1
인수를 표시할 위치에 -I {}
, 및 를 사용하세요 .{}
xargs -I {} -n 1 echo rm /usr/src/packages/{}
(이외의 다른 것을 사용할 수도 있습니다 {}
. {}
이는 매우 일반적입니다.)
이것이 없으면 xargs
simpy는 입력을 추가 인수로 추가하므로 어디에든 공백을 추가하는 것은 문제가 되지 않습니다. 명령은 입력을 별도의 인수로 받습니다.
특히 파일과 디렉터리를 구별하려는 경우에는 find
대신을 사용해야 합니다 .ls
파일만 삭제하려면 다음과 같습니다.
find . -type f -exec rm /usr/src/packages/{} \;